let result = []; //存放查询结果
model.WithdrawModel.find({status:'processing'}, (err, doc) => {
if (err) {
console.log(err);
res.json({ code: -1, msg: '查询失败'});
return;
} else {
doc.map((item) => {
model.UserModel.findOne({phone:item.phone},'name IDcard bank bankCard bank_area bank_name', (err, bankInfo) => {
if (err) {
console.log(err);
} else {
let obj = {};
Object.assign(obj, JSON.parse(JSON.stringify(item)), JSON.parse(JSON.stringify(bankInfo)));
result.push(obj);
console.log(result);
}
})
});
res.json({ code: 0, msg: '查询成功', result: result});
return;
}
});
Beim Durchlaufen der Abfrage gibt das obige Ergebnis direkt einen Nullwert zurück. Wie kann ich sicherstellen, dass alle internen Abfragen in doc.map abgeschlossen sind, bevor der Ergebniswert herausgenommen wird?
自问自答吧,也是受人指点。
promise.all 实现如下:
--------------------------------------补充-------------------------------------------------
计数的思想仍然是可以实现的,使用 event 模块即可:
由于Promise是异步调用,所以在所有的查询之后使用
return
,会在还没真正获取到数据之后就返回,所以需要Promise内添加一个计数器count,在所有的Promise下,加一个循环,当所有的doc都循环到了(count == doc.length
),才可以输出返回。