我想為陣列中的每個元素查詢貓鼬(它本身也是對貓鼬的查詢的結果)并將結果附加到每個尊重的陣列元素并回傳陣列:
Service.find(query)
.then((servicesList) => {
const result = [];
servicesList.forEach((service) => {
Reviews.find({ service: service._id }).then((revs) => {
service.reviews = revs; // Appending the result to element
result.push(service); // Pushing the element with it appended reviews to the result
});
});
return res.json(result);
})
.catch((erro) => {
return res.json({});
});
但result不會得到任何值,因為在回傳結果return res.json(result);之前被呼叫Reviews.find()
解決問題的方法是什么?
我已經檢查過了: 貓鼬 - 對每個陣列元素執行查詢, 但這并不是我想要的。
uj5u.com熱心網友回復:
res.json(result)在各個異步操作完成之前同步執行。這意味著在陣列接收到任何行之前。 Reviews.findresult
用于Promise.all在回傳之前等待所有異步操作result:
Promise.all(servicesList.map((service) =>
Reviews.find({service: service._id}).then((revs) => {
service.reviews = revs;
result.push(service);
})
)).then(function() {
res.json(result);
})
(或者,考慮在資料庫上使用連接操作,通過單個ServiceJoinReview.find操作來實作所有這些。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/489431.html
