因此,在我看到的任何示例中,我希望并行運行的呼叫數量不確定,從一開始就知道承諾的數量。
await Promise.allSettled([someCall(), anotherCall()]);
我的問題是我不知道下面的代碼中需要多少個承諾我可能有 4 個延遲或 50 個不同長度的延遲,但它似乎沒有等待我的任何想法。
let qq = bulk([1,2,3,4,5]);
console.log('last');
async function bulk(array){
const promiseArray = [];
for (const delay of array) {
promiseArray.push(bulkQuery(delay));
}
const valueArray = await Promise.allSettled(promiseArray);
}
async function bulkQuery(delay){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(delay);
resolve('foo');
}, delay*1000);
});
}
uj5u.com熱心網友回復:
改為這樣,您撰寫函式的方式存在問題。
async function myFunction() {
let qq = await bulk([1,2,3,4,5]);
console.log('last');
async function bulk(array){
const promiseArray = [];
for (const delay of array) {
promiseArray.push(bulkQuery(delay));
}
const valueArray = await Promise.allSettled(promiseArray);
}
async function bulkQuery(delay){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(delay);
resolve('foo');
}, delay*1000);
});
}
}
myFunction();
通過設計,您的方法 bulk 也是一個“thenable”功能(回傳承諾)。這意味著批量內部的執行將按照 async 和 await 進行,但是任何 async 方法也會回傳一個 promise,這意味著您需要撰寫 then 或通過將整個函式設定為 async await 來進行 await(正如我在代碼中所做的那樣片段)
uj5u.com熱心網友回復:
您的代碼實際上有效,但僅在bulk. 既然bulk它本身就是async,它實際上是一個在幕后的承諾,所以你必須把它當成一個承諾!
當你這樣做時:
let qq = bulk([1,2,3,4,5]);
console.log('last');
您無需等待qq承諾解決,而是last立即登錄。你應該做的是——
let qq = bulk([1,2,3,4,5]);
qq.then(() => console.log('last'));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/480677.html
上一篇:如何等待異步地圖功能?
