我創建了如下三個 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();
})();
但是,我收到了一條意外的控制臺訊息,如下所示。
Promise One Promise Two Promise Three
default: 2.004s
據我所知,每個等待都有 2000 毫秒的運行時間。但是,它沒有。
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);
});
})();
uj5u.com熱心網友回復:
在這兩種情況下,您都會立即構建所有 Promise。在宣告PromiseThree結束后,對于兩者,您都會得到 3 個承諾,每個承諾會在 2 秒后解決。無論腳本后面發生什么,每一個都會在 2 秒后解決。
如果你使用Promise.all,所有的承諾將在 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;
如果您在 ing 之前的 Promise 之后構建其他 Promise ,情況會有所不同await——在這種情況下,它們會按照您所期望的那樣串行運行await.
let makePromise = () => new Promise(resolve => {
setTimeout(() => {
resolve();
}, 2000);
});
console.log('starting');
(async () => {
console.time();
await makePromise();
await makePromise();
await makePromise();
console.timeEnd();
})();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/519725.html
