在我的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;
},
答案 0 :(得分:0)
await
只有当await
函数返回与您想要await
的任何内容相关联的承诺时,才会等待某事。您的dataMap()
函数不返回任何内容,因此该函数上的await
不会等待任何内容。
因此,为了使用await
,您的dataMap()
函数需要返回一个与它正在进行的异步操作相关联的promise。