【发布时间】:2021-10-15 09:03:37
【问题描述】:
在调用另一个函数以重新加载应该由 axios 调用更新的数据之前,我需要等待由 forEach 循环调用的函数中的所有 axios 调用运行。
function1() {
let arr = [1, 2, 3, 4, 5];
arr.forEach((num) => {
function2(num);
});
//Wait until each call in the forEach loop above
//is done before running the function3() function.
function3();
}
function2(number) {
axios.post('/internal-url/action/' + number)
.then((response) => {
return response;
});
}
function3() {
console.log('reloading data...');
/* DB call to reload data */
console.log('data is reloaded');
}
这里的问题是数据在 axios 调用完成之前重新加载。我知道 axios 调用有效,因为我可以看到它们在数据库中更新,但我需要 function1() 等待 function2() 中的所有 axios 调用完成,然后再运行 function3() 中的重新加载。
我尝试过同时创建 function1() 和 function2() async/await 函数,然后分别创建函数,但这不起作用。我该怎么做呢?
【问题讨论】:
-
forEach不是异步的。你想要实现的是默认行为 -
我并不特别了解 Axios,但在 JavaScript 中执行此类操作的通常方式涉及到在 AJAX 调用完成时调用的“回调”。例如,您可能有一个计数器,该计数器由
foreach循环(跟踪未完成请求的数量)递增,然后,在调用的回调中,从该计数器中减去 1 并测试为零。当它达到零时,你打电话给你的function3...
标签: javascript asynchronous foreach async-await axios