【发布时间】:2017-11-10 04:51:54
【问题描述】:
下面的代码 sn-p 使用sails waterline ORM 进行数据库查询和发送响应。但是,执行流程很奇怪,map函数之外的代码在map函数执行完成之前就已经运行了。在“我在地图内”之前,“我在地图外”正在控制台中打印。我认为可以使用 Promise 或 async / await 来解决这个问题。我试过在下面使用 Promise.all() ,但它不起作用,响应总是一个空数组。如果您能举例说明如何解决此类问题,我将不胜感激。
allMembers: (req, res) => {
const projectId = req.params.id;
ProjectMembers.find({projectId: projectId}).exec( (err, members) => {
if(err) res.serverError("bad request!");
if(members.length === 0) res.notFound({message: "No members are found for this project!"});
let membersInfo = [];
let promise = Promise.all(members.map(m => {
User.findOne({id: m.userId}).exec( (err, user) => {
if(err) membersInfo.push({name: null, userId: null, email:null,rate:null, error: 'Internal error!'})
else if(!user) membersInfo.push({name: null, userId: null, email:null,rate:null, error: 'No user found'})
else membersInfo.push({name: user.name, userId: user.id, rate: m.rate, error: null})
console.log("i am inside of map");
})
}));
console.log("I am outsie of map")
promise.then( (resolve) => {return res.ok({members: membersInfo})});
}
【问题讨论】:
标签: javascript async-await sails.js es6-promise waterline