基本上我有几个异步函数正在等待对方完成,我想在同一时间启动这些函数的多个进程。现在我的代码等待,直到一个进程(一个循环)将完成,然后开始另一个,我想开始更多的循环在同一时间。
我代码:
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....
将循环体放入async函数中。然后,您可以启动多个,而无需等待每个。
将函数返回的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));
}
}