gpt4 book ai didi

javascript - 使用 Q/promises/异步函数时,如何将值从一个类方法返回到另一个类方法?

转载 作者:行者123 更新时间:2023-12-03 10:50:19 25 4
gpt4 key购买 nike

使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com