首页 > 解决方案 > 在 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();
    
  };

标签: javascriptarraysasync-await

解决方案


您可以在地图中返回承诺,在 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=>{
       //
   })
  };

推荐阅读