我正在用setTimeouts在其中構建Promise鏈。所有的承諾都需要串聯運行而不是平行運行。我正在使用Bluebird模塊來實現Promise執行的串行流程。帶有setTimeout的JavaScript序列承諾
有人可以解釋我爲什麼這段代碼給我輸出1,2,3,4而不是4,3,2,1?
var bluebirdPromise = require('bluebird');
function p1(value) {
return new Promise(function(resolve, reject) {
setTimeout(function(resolve) {
console.log(value);
resolve;
}, value * 1000);
});
}
var arr = [p1(4), p1(3), p1(2), p1(1)];
bluebirdPromise.reduce(arr,
function(item, index, length) {
}).then(function (result) {
});
當您調用'p1'時,您已經開始操作。你的'arr'解決方案不起作用。 – Bergi
'bluebirdpromise.reduce([4,3,2,1],p1)'可能會完成這項工作(一旦你糾正了'p1',就像trincot所詳述的那樣) – Bergi