从我读过的所有内容来看,async/await 只是 Promise 的语法糖。由此,我希望以下两个函数能够相同地工作,假设promise_1并且promise_2都是承诺:
function promises(promise_1, promise_2) {
promise_1.then((val) => {
console.log(val);
promise_2.then((val2) => {
console.log(val2);
});
});
}
async function asyncawait(promise_1, promise_2) {
console.log(await promise_1);
console.log(await promise_2);
}
但是,在测试它们时,我注意到该promises函数比 async 函数更早地解决了第二个承诺:
let func;
async function test() {
let promise_1 = Promise.resolve("first");
let promise_2 = Promise.resolve("second");
func(promise_1, promise_2);
console.log("await first");
await promise_1;
console.log("awaited first");
console.log("await second");
await promise_2
console.log("awaited second");
}
跑步
func = promises;
test();
产生以下输出:
await first
first
second
awaited first
await second
awaited second
请注意在 await 之后如何promise_1解决。promise_1promise_2
然而,运行
func = asyncawait;
test();
产生以下(预期的)输出:
await first
first
awaited first
await second
second
awaited second
承诺决议交错。
是什么导致分辨率顺序出现这种差异?