使用 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());
关于javascript - 使用 Q/promises/异步函数时,如何将值从一个类方法返回到另一个类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28444230/