当试图理解async / await时,我尝试了这段代码,它没有像我预期的那样表现。
let test = async function () {
let result = new Promise((resolve, reject) => {
setTimeout(() => resolve('done1'), 2000)
})
let result2 = new Promise((resolve, reject) => {
setTimeout(() => resolve('done2'), 2500)
})
let x1 = await result
console.log(x1)
let x2 = await result2
console.log(x2)
}
test()
我希望控制台在2秒后显示done1,然后在done1后2.5秒显示done2。相反,它在2秒内显示done1并在此之后0.5秒内完成。为什么它会像这样,因为我在显示第一个之后等待第二个setTimeout?
答案 0 :(得分:1)
当您创建new Promise
时,它会开始运行它的代码。当你在里面有setTimeout
时,实际上计时器正在运行。在await
电话会议之前使用Promise
时,它会一直等到承诺得到解决或拒绝后再开始工作。
您需要创建每个承诺,然后等待它。
let test = async function () {
let result = new Promise((resolve, reject) => {
setTimeout(() => resolve('done1'), 2000);
});
let x1 = await result;
console.log(x1);
let result2 = new Promise((resolve, reject) => {
setTimeout(() => resolve('done2'), 2500);
});
let x2 = await result2;
console.log(x2);
}
test()