gpt4 book ai didi

node.js - Bluebird map 系列

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:42 29 4
gpt4 key购买 nike

我正在尝试按顺序执行一系列 promise ,只有在前一个解决后才转到下一个。来自 Bluebird 文档:

The iterator won't be called for an item until its previous item, and the promise returned by the iterator for that item are fulfilled. http://bluebirdjs.com/docs/api/promise.mapseries.html

var Promise = require('bluebird');


function test(time) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
console.log(time);
resolve(time);
}, time);
});
}

Promise.mapSeries([test(2000), test(1000), test(500), test(3000)], function(a) {
return a;
}).then(function(results) {
console.log(results);
});

我期望测试函数中的 console.log 按顺序显示:2000、1000、500、3000。我希望这是因为正如文档所述,每个项目只有在前一个解决后才会出现。相反,我得到了 500、1000、2000、3000,这反射(reflect)了所有函数都是瞬时调用的。此外,results 确实按照调用顺序显示结果,尽管此时这无关紧要。

我是不是误会了什么?

最佳答案

您的测试调用在 Promise.mapSeries 有机会运行之前进行。此外,ma​​pSeries 通常在 promise 实例上运行。也许下面的例子有助于理解?注意这次 test(time) 是如何返回一个函数的。

function test(time) {
return function(value) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
console.log('time', time);
resolve(time);
}, time);
});
};
}

Promise.resolve([test(2000), test(400), test(1000), test(1), test(5000)])
.mapSeries(function(asyncMethodPassed) {
return asyncMethodPassed();
}).then(function(results) {
console.log('result', results);
});

关于node.js - Bluebird map 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42582747/

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