async / await不等待async.map调用完成

时间:2017-08-22 04:10:07

标签: javascript node.js async-await

在我的Node.js应用程序中,我尝试使用辅助函数来收集和格式化一些数据,最终通过API端点返回。我需要遍历一个数组,并为每个条目,对我的数据库进行异步调用。但是,一旦我映射到我的路线,我就无法返回这个新的数据数组。我相信这与async.map'的性质有关。但一直无法从文档中找到它。我错过了什么吗?更好的方法吗?

router.get('/route',async (req,res) => {
    const formattedData = await module.formatData(data);
    // formattedData IS RETURNED AS UNDEFINED HERE
    res.json({data:formattedData});
};

相关助手功能:

formatData: async(data) => {
    // gets entire object from the id that I originally had
    getNewData: (dataID) => {
        const data = Data.find({_id:dataID},(error,response)=>{
          return response;
        })
        return data;
    },
    const formatDataHelper = async(data,done) =>{
      // THIS function queries database (reason I have to use async)
      const newData = await getNewData(data);
      done(null, newData);
    }
    function dataMap(data, callback) {
      async.map(data, formatDataHelper, callback);
    }

    const returnData = await dataMap(data,(err,response)=>{
      return response;
    })

    return returnData;

},

1 个答案:

答案 0 :(得分:0)

await只有当await函数返回与您想要await的任何内容相关联的承诺时,才会等待某事。您的dataMap()函数不返回任何内容,因此该函数上的await不会等待任何内容。

因此,为了使用await,您的dataMap()函数需要返回一个与它正在进行的异步操作相关联的promise。