gpt4 book ai didi

javascript - 在 Node 的 for 循环中异步运行函数 x 次

转载 作者:行者123 更新时间:2023-12-03 01:02:05 27 4
gpt4 key购买 nike

我有一个带有案例的开关,在这种情况下我想运行 axios.get() X 次,我正在尝试这样做:

          case "visit":
let i;
for (i = 0; i < JSON.parse(cmd).contents.threads; i++) {
let i;
for (i = 0; i < JSON.parse(cmd).contents.visits; i++) {
console.log(i + 1 + " visits run!");
axios.get(JSON.parse(cmd).contents.target).then(res => {});
if (i === JSON.parse(cmd).contents.visits - 1) {
console.log("Visiting complete!");
}
}
}
break;

问题是它不会异步运行并在之后给我结果,输出如下所示:

1 visits run!
2 visits run!
3 visits run!
4 visits run!
5 visits run!
6 visits run!
7 visits run!
8 visits run!
9 visits run!
10 visits run!
Visiting complete!
1 visits run!
2 visits run!
3 visits run!
4 visits run!
5 visits run!
6 visits run!
7 visits run!
8 visits run!
9 visits run!
10 visits run!
Visiting complete!

一次全部完成,所以这不是异步运行,有什么建议我应该如何运行这个异步吗?我正在尝试以这种方式学习 Node 中的异步并希望实现这一目标。

哦,在我忘记之前,这是 cmd 的 js 对象

 {
id: "002",
app: "visit",
contents: {
target: "https://google.com/",
visits: 10,
threads: 2
}

最佳答案

这是因为所有输出都在循环的同步执行中发送到控制台。您在后台启动异步请求,但不提供在请求完成后执行任何操作的回调。您应该在传递给 then() 的函数中输出到控制台。

这是一个例子:

const contents = JSON.parse(cmd).contents;

for (let i = 0; i < contents.threads; i++) {
let count = 0;

for (let j = 0; j < contents.visits; j++) {
axios.get(contents.target).then(result => {
const number = ++count;

console.log(number + " visits run!");
if(number == contents.visits) console.log("Visiting complete!");
});
}
}

关于javascript - 在 Node 的 for 循环中异步运行函数 x 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com