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;
}
});
循環遍歷查詢,上述 result 直接傳回空值,請問怎麼保證 doc.map 內部的查詢都結束之後再取出 result 的值?
自問自答吧,也是受人指點。
promise.all 實作如下:
--------------------------------------補充---------- ---------------------------------------
計數的想法仍然是可以實現的,使用 event 模組即可:
![](http://img.php.cn/upload/image/000/000/000/6aa370877e111663b878182fcf2c80ad-0.png)
由於Promise是異步調用,所以在所有的查詢之後使用
return
,會在還沒真正獲取到數據之後就返回,所以需要Promise內添加一個計數器count,在所有的Promise下,加一個循環,當所有的doc都循環到了(count == doc.length
),才可以輸出回傳。