与不确定数量的调用并行调用异步等待?
Call async await in parallel with an indeterminate amount of calls?
因此,在我看到的任何示例中,我希望并行进行的调用数量不确定。
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);
});
}
您的代码确实有效,但仅在 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'));
改为这样,您编写函数的方式存在问题。
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' 函数(returns 承诺)。这意味着批量内部的执行将按照 async 和 await 但任何异步方法也是 returns 一个承诺,这意味着您需要编写一个 then 或通过将整个函数设置为异步等待来进行等待(正如我所拥有的)在代码片段中完成)
因此,在我看到的任何示例中,我希望并行进行的调用数量不确定。
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);
});
}
您的代码确实有效,但仅在 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'));
改为这样,您编写函数的方式存在问题。
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' 函数(returns 承诺)。这意味着批量内部的执行将按照 async 和 await 但任何异步方法也是 returns 一个承诺,这意味着您需要编写一个 then 或通过将整个函数设置为异步等待来进行等待(正如我所拥有的)在代码片段中完成)