gpt4 book ai didi

javascript - 使用 Q promise 库不按顺序执行 Promise 链

转载 作者:行者123 更新时间:2023-11-30 08:05:25 26 4
gpt4 key购买 nike

我在我的代码中执行多个批处理异步操作。虽然批处理中的操作应该异步执行,但批处理应该一个接一个地同步执行。

这是一个jsfiddle我创建。查看控制台,因为所有输出都在那里。为方便起见,这里是代码:

asyncChain(10, 'FIRST CHAIN')
.then(function () {
asyncChain(10, 'SECOND CHAIN');
})
.then(function(){
asyncChain(10, 'THIRD CHAIN');
});

function asyncChain(n, msg) {
var promiseChain = Q.fcall(function () {
10;
});
console.log('starting:' + msg);
for (var i = 0; i < n; i++) {
promiseChain = promiseChain.then(asyncOperation(i, msg));
}
console.log('returning' + msg);
return promiseChain;
}

function asyncOperation(i, msg) {
var d = Q.defer();

setTimeout(function () {
console.log('resolving for #' + i + msg);
d.resolve(i);
}, 300 + Math.random()*1000);

return d.promise;
}

基本上这些是我希望一个接一个完成的 3 个批处理 promise 操作。这意味着此示例的输出将如下所示:

starting FIRST CHAIN
returning FIRST CHAIN
resolving 1..10 FIRST CHAIN

starting SECOND CHAIN
returning SECOND CHAIN
resolving 1..10 SECOND CHAIN
and so on

我尝试使用 all() 方法而不是 then() 但它在第一个链后停止执行。我错过了一些明显的东西吗?

感谢您的任何建议。

干杯

最佳答案

Am I missing something obvious?

是的。对于 then 要用另一个 promise 解决这个 promise,您必须返回另一个 promise 给它。您的函数只是启动了另一个 asyncChain,但从回调中返回了 undefined,这立即解决了 promise。

asyncChain(10, 'FIRST CHAIN').then(function () {
return asyncChain(10, 'SECOND CHAIN');
}).then(function(){
return asyncChain(10, 'THIRD CHAIN');
});

关于javascript - 使用 Q promise 库不按顺序执行 Promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18933903/

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