【发布时间】:2022-03-15 08:13:01
【问题描述】:
基本承诺问题:
console.log('Promise START');
function makeFullJSON(time) {
return new Promise((resolve, reject) => {
setTimeout(resolve, time, [time]);
})
}
var p1 = makeFullJSON(1000);
var p2 = makeFullJSON(500);
var p3 = makeFullJSON(750);
p1.then(array => {
console.log('Promise 1 complete', array);
});
p2.then(array => {
console.log('Promise 2 complete', array);
});
p3.then(array => {
console.log('Promise 3 complete', array);
});
Promise.all([p1, p2, p3]).then(arrayOfAllResolvedValues => {
console.log('Array of resolved values:', arrayOfAllResolvedValues);
});
console.log('Promise END');
代码输出为:
Promise START
Promise END
Promise 2 complete [ 500 ]
Promise 3 complete [ 750 ]
Promise 1 complete [ 1000 ]
Array of resolved values: [ [ 1000 ], [ 500 ], [ 750 ] ]
你如何重写代码,输出如下:
Promise START
Promise 2 complete [ 500 ]
Promise 3 complete [ 750 ]
Promise 1 complete [ 1000 ]
Array of resolved values: [ [ 1000 ], [ 500 ], [ 750 ] ]
Promise END
【问题讨论】:
-
听起来像是stackoverflow.com/q/14220321/497418的副本。
-
只需将 Promise END
console.log放在 resolved values 旁边吗? -
Promise.all([p1, p2, p3]).then(() => console.log('Promise END')) -
您永远不能让 Javascript 中的解释器“等待”任何异步操作。相反,你做你在任何单线程、事件驱动的系统中总是做的事情——你注册一个回调来在操作完成时得到通知,然后你在那个回调中执行你的工作。您不会在 Javascript 中“等待”。
-
谢谢大家。我同意回拨通知。这似乎是目前唯一的方法(直到我开始使用异步等待模式)。
标签: javascript promise