【问题标题】:How to start multiple await proccesses at the same time in node如何在节点中同时启动多个等待进程
【发布时间】:2021-10-04 16:03:00
【问题描述】:

基本上我有几个异步函数正在等待对方完成,我想同时启动这些函数的多个进程。现在我的代码会等到 1 个进程(1 个循环)完成,然后再启动另一个,我想同时启动更多循环。

我的代码:

async function Start() {

  console.log("Starting...")

  try {

for (let i = 0; i < 3; i++) {

             var taskid = i
    
            await AddBasket(taskid)
            const url = await Basket(taskid)
            const urlek = await Guest(taskid, url)
            await ShipInfo(taskid, urlek)
}
  }
  catch (error) {
    console.error(chalk.red("Error while starting", error));
  }
}

Start()
In practice it looks like this: 
TASK: 0 Adding to cart
TASK: 0 Successfully added to cart
TASK: 0 Posting some to get checkout page.
TASK: 0 Successfully posted
TASK: 0 Scraping for checkout link.
TASK: 0 Successfully scraped
TASK: 0 Submitting shipping info
TASK: 0 Successfully Submitted shipping info
TASK: 1 Adding to cart
TASK: 1 Successfully added to cart....

我想让它看起来像:

TASK: 0 Adding to cart
TASK: 1 Adding to cart
TASK: 2 Adding to cart....

【问题讨论】:

  • 您可能希望将Promise.all 与数组一起使用,然后等待结果
  • 使用await 的目的是让异步代码看起来是同步的。如果您真的希望它是异步的,请不要这样做。

标签: javascript node.js loops asynchronous async-await


【解决方案1】:

将循环体放入异步函数中。然后,您可以启动多个,而无需等待每个。

将函数返回的promise组成一个数组,最后使用Promise.all()等待所有的promise。

async function oneBasket(taskid) {
  await AddBasket(taskid)
  const url = await Basket(taskid)
  const urlek = await Guest(taskid, url)
  await ShipInfo(taskid, urlek)
}

async function Start() {
  console.log("Starting...")
  let baskets = [];
  for (let i = 0; i < 3; i++) {
    baskets.push(oneBasket(i));
  }
  try {
    await Promise.all(baskets);
  } catch (error) {
    console.error(chalk.red("Error while starting", error));
  }
}

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
相关资源
最近更新 更多