javascript - 在 Array.map 之后运行一个函数
问题描述
一旦 Array.map 完成执行,我想运行一个异步函数。
我在函数 updateMaterials 的 map 方法中进行异步调用,我的目标是在 updateMaterials 完成执行后调用 addDataToDB。
功能 1:更新材料
const updateMaterials = recipeRawMaterials => {
recipeRawMaterials.map((item, index) => {
updateRawMaterialsDB(item._id, item.rate, index);
});
};
异步函数:updateRawMaterialsDB
const updateRawMaterialsDB = async (id, rate, index) => {
console.log(state.recipeRawMaterials);
const body = JSON.stringify({
rate
});
console.log(body);
const config = {
headers: {
'Content-Type': 'application/JSON'
}
};
const res = await axios.put(`/api/v1/rawMaterial/${id}`, body, config);
};
const addDataToDB = async (recipeName, recipeRawMaterials) => {
const config = {
headers: {
'Content-Type': 'application/JSON'
}
};
const res = await axios.post('/api/v1/basicRecipe', body, config);
setLoading();
};
解决方案
您可以在地图中返回承诺,在 Promise.all 完成后,您可以调用 addDataToDB 函数
const updateMaterials = recipeRawMaterials => {
const promises = recipeRawMaterials.map((item, index) => updateRawMaterialsDB(item._id, item.rate, index));
Promise.all(promises).then(()=>{
// addDataToDB
})
.catch(e=>{
//
})
};
推荐阅读
- springmockito - 如何在查询方法中使用 rs 作为参数模拟 jdbcTemplate.query()?
- javascript - 按类别分组数据
- c# - 在加载 HTML 之前禁止单击 WebBrowser
- python - 如何在python中使用数据框进行行级计算?
- oracle - Oracle SQL Spool dbms_metadata.get_ddl 在 19c 中不同
- python - 如何在 PyCharm 中正确使用 VTK
- scala - 将 TupleN 值分配给 *: 类型变量如何在 Scala 3 中工作?
- php - 访问受 Sanctum 保护的路由不需要 Laravel Sanctum CSRF 令牌
- python - sqlalchemy.exc.NoResultFound:需要一个时没有找到行,Tkinter 回调中的异常
- flutter - 如何创建颤振本地通知自定义布局