javascript - 如何等到 Javascript forEach 循环完成后再继续下一个 sep
问题描述
在我调用另一个函数来重新加载应该由 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()
等待所有 axios 调用function2()
完成,然后再运行 reload in function3()
。
我曾尝试同时制作function1()
和function2()
async/await
单独使用,但没有奏效。我将如何具体执行此操作?
解决方案
创建一组承诺,然后Promise.all
使用async/await
.
// async/await - create an array of promises
// from function2, then await until Promise.all has
// fully resolved/rejected
async function1() {
let arr = [1, 2, 3, 4, 5];
const promises = arr.map((num) => function2(num));
await Promise.all(promises);
function3();
}
function2(number) {
return axios.post('/internal-url/action/' + number);
}
function3() {
console.log('reloading data...');
/* DB call to reload data */
console.log('data is reloaded');
}
推荐阅读
- python - How to get pass error : TypeError: addtrans() missing 1 required positional argument: 'self'
- angular - Angular 11 Purple/Green Material Theme Not Working Correctly
- c++ - How to define function with arbitrary precision (Eigen/MPRealSupport)
- php - 如何在php中生成二维码和可下载链接
- deep-learning - 输入神经元数量的标准是什么
- html - 如何将网格中的元素从右向左移动
- elasticsearch - Logstash 模糊端口定义
- php - 如果更新时间超过 2 小时,如何使用 PHP 存储获取的 JSON 数据并更新它?
- flutter - 错误:无法在字段初始化程序中访问“this”以读取“_endeks”
- reactjs - React - 如何正确导入本地 UMD 模块