并行 aync wait 而不是 Promise.all

问题描述 投票:0回答:1

看下面的代码,它使用

async
await
来执行
promises
列表。但它们将按顺序执行,这意味着一旦
promises[0]
解析,则仅开始执行
promises[1]

我想并行地激发所有的承诺并一起等待它们。我知道我们可以使用

Promise.all
来做到这一点,但是我们如何仅使用
await
async
来做到这一点?

// An array of promises
let promises = [
  Promise.resolve(1),
  Promise.reject("error"),
  Promise.resolve(2),
];

// An async function that uses a for loop
async function useForLoop() {
  try {
    // Declare an empty array to store the results
    let results = [];
    // Use a for loop to iterate over the promises
    for (let i = 0; i < promises.length; i++) {
      // Use await to pause the execution until the current promise is resolved
      let result = await promises[i];
      // Push the result to the array
      results.push(result);
    }
    // Log the results
    console.log(results); // [1, 2]
  } catch (error) {
    // Handle any error from the promises
    console.error(error); // "error"
  }
}
javascript node.js asynchronous promise
1个回答
0
投票

一般来说,要允许两个任务同时运行,只需在您需要完成它们之前就不要等待它们。

例如:

pizza = await OrderPizza();
beer = await OrderBeer();
// Pizza is cold now because we waited before ordering beer :(
Eat(pizza);
Drink(beer);

...可以成为...

pizza = OrderPizza();
beer = OrderBeer();
// eat hot pizza as soon as it gets here.
Eat(await pizza);
// but beer may be warm now, depending on how long pizza took
Drink(await beer);

链完全解决了这个问题。你趁热吃披萨,趁冷喝啤酒。

OrderPizza().then(Eat);
OrderBeer().then(Drink);

不要等待,除非您需要延迟另一项操作或需要其结果。例如,晚饭后清理是这样的:

food = OrderPizza().then(Eat);
beverages = OrderBeer().then(Drink);
await food;
await beverages;
CleanUp();

(此外,Promise.All 可用于等待所有多个 Promise,或者 Promise.Any 可用于等待多个 Promise 中的第一个。)

© www.soinside.com 2019 - 2024. All rights reserved.