当使用Q/promises/异步函数时,如何将一个值从一个类方法返回到另一个类
How do you return a value from one class method to another when using Q/promises/asynchronous functions?
当使用Q/promises/异步函数时,将一个类方法中的值返回到不同的类方法的最佳方式是什么?
具体来说,我有以下内容,其中ClassOne.myMethod()将调用ClassTwo.test()来执行几个异步任务(数据库更新、文件写入等)。我希望ClassTwo.test()返回一些东西(在本例中为"FOUR")。在使用promise和异步调用时如何做到这一点?
我这样做是因为我希望ClassTwo是一组非常通用的方法,用于执行将由其他类调用的任务(以免每次都重新发明轮子)。
例如,
var myClass = new ClassTwo();
ClassOne.prototype.myMethod = function(myClass) {
console.log('Returns: ', myClass.test());
};
ClassTwo.prototype.test = function() {
var one = function() {
var deferred = Q.defer();
console.log('ONE');
deferred.resolve();
return deferred.promise;
};
var two = function() {
var deferred = Q.defer();
console.log('TWO');
deferred.resolve();
return deferred.promise;
};
var three = function() {
var deferred = Q.defer();
console.log('THREE');
deferred.resolve();
return 'FOUR';
};
return one()
.then(two)
.then(three);
};
我认为您正在寻找以下内容。请注意,我已经将所有对deferred.resolve()的调用打包为异步函数的回调(在本例中为process.nextTick),因为这将是一个更现实的用例,然后在返回promise之前解析它,我假设您将如何处理异步任务。此外,您还声明了一个变量"myClass",并将相同的标识符用作"myMethod"的函数参数。我不认为这是您真正想要做的,所以我在下面的示例中更改了这一点。
var ClassTwo = function() {};
var ClassOne = function() {};
var Q = require('q');
ClassOne.prototype.myMethod = function(myClass) {
myClass.test().then(function(result) { // now test returns a promise
console.log('returns '+ result); // that we call .then() on
});
};
ClassTwo.prototype.test = function() {
var one = function() {
var deferred = Q.defer();
console.log('ONE');
process.nextTick(function() { deferred.resolve()});
return deferred.promise;
};
var two = function() {
var deferred = Q.defer();
console.log('TWO');
process.nextTick(function() { deferred.resolve()});
return deferred.promise;
};
var three = function() {
var deferred = Q.defer();
console.log('THREE');
process.nextTick(function() { deferred.resolve('FOUR')});
return deferred.promise;
};
return one()
.then(two)
.then(three)
};
(new ClassOne()).myMethod(new ClassTwo());
相关文章:
- 当使用Q/promises/异步函数时,如何将一个值从一个类方法返回到另一个类
- 有没有一个JavaScript方法可以让我根据用户所在的html页面为正文提供特定的css类
- 在ES2015中定义一个类,构造函数方法是什么以及为什么它是必不可少的
- 从另一个类的公共方法调用一个类的公共方法
- 从同一类中的另一个方法调用 javascript 类方法
- 将参数传递给从另一个类调用方法的一个类上的便利方法
- javascript中的闭包与c++中的类实例(它有一个私有成员和一个公共方法)相当吗
- 从另一个方法调用javascript类方法
- Javascript从一个类继承属性和方法
- ES6 Javascript类-定义一个现有函数的类方法
- 如何为包含来自另一个类/文件的全局变量的方法编写茉莉测试?
- ES6 -用import语句在类上声明一个原型方法
- 如何从字符串创建一个名称的类方法
- 如果我的ES6类方法返回一个承诺,即使没有必要
- 用ES6类传递一个实例方法给super
- ES6类:设置函数的返回作为一个原型方法
- 如何包装一个类从一个渲染方法到OnClickOutside通过ReactJS
- 如何在javascript中为根类对象添加一个新方法
- 如何在另一个文件中定义一个类方法
- jQuery find()方法不能只在一个类上工作