Jun*_*ark 3 javascript asynchronous node.js promise async-await
我创建了三个 Promise,如下所示并等待它们,预计它们需要 6000 毫秒:
let PromiseOne = new Promise(resolve => {
setTimeout(() => {
resolve('Promise One');
}, 2000);
});
let PromiseTwo = new Promise(resolve => {
setTimeout(() => {
resolve('Promise Two');
}, 2000);
});
let PromiseThree = new Promise(resolve => {
setTimeout(() => {
resolve('Promise Three');
}, 2000);
});
(async() => {
console.time();
let ResponseOne = await PromiseOne;
let ResponseTwo = await PromiseTwo;
let ResponseThree = await PromiseThree;
console.log(ResponseOne, ResponseTwo, ResponseThree);
console.timeEnd();
})();Run Code Online (Sandbox Code Playgroud)
但是,我收到了一条意外的控制台消息,如下所示。
Promise One Promise Two Promise Three
default: 2.004s
Run Code Online (Sandbox Code Playgroud)
据我所知,每个await都有2000ms的运行时间。但是,事实并非如此。
async在这种情况下,我上面使用/ 的代码await和下面使用 的代码有什么区别Promise.all?
let PromiseOne = new Promise(resolve => {
setTimeout(() => {
resolve('Promise One');
}, 2000);
});
let PromiseTwo = new Promise(resolve => {
setTimeout(() => {
resolve('Promise Two');
}, 2000);
});
let PromiseThree = new Promise(resolve => {
setTimeout(() => {
resolve('Promise Three');
}, 2000);
});
(() => {
Promise.all([PromiseOne, PromiseTwo, PromiseThree]).then(res => {
console.log(res);
});
})();Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您都会立即构建所有 Promise。在声明结束后PromiseThree,对于两者来说,你都剩下 3 个承诺,每个承诺都会在 2 秒后解决。无论脚本稍后发生什么,每个问题都会在 2 秒后解决。
如果你使用Promise.all,所有的 Promise 将在 2 秒后解决。
如果您使用async/ await,您等待的第一个将需要 2 秒才能解析。与此同时,另外两个也将得到解决,因此这样做await PromiseTwo几乎await PromiseThree不需要任何时间 - 因此,总共仍然需要 2 秒。
// at this point, each promise has been created and each will take 2 seconds
(async() => {
console.time();
// 2 seconds for the below line
let ResponseOne = await PromiseOne;
// after 2 seconds, all have resolved; below line takes no time at all
let ResponseTwo = await PromiseTwo;
// same as above
let ResponseThree = await PromiseOne;
Run Code Online (Sandbox Code Playgroud)
如果您在 ing 之前的承诺之后构建其他承诺,情况会有所不同await- 在这种情况下,它们会按照您期望的那样串行运行await。
// at this point, each promise has been created and each will take 2 seconds
(async() => {
console.time();
// 2 seconds for the below line
let ResponseOne = await PromiseOne;
// after 2 seconds, all have resolved; below line takes no time at all
let ResponseTwo = await PromiseTwo;
// same as above
let ResponseThree = await PromiseOne;
Run Code Online (Sandbox Code Playgroud)