在給定的程式碼中,嘗試在循環內從多個MongoDB 查詢檢索資料並組裝結果到單一資料數組中。但是,當嘗試傳回此資料作為回應時,會出現問題。
問題源自於 MongoDB 查詢的非同步特性。當執行查詢時,函數不會立即傳回結果,而是啟動任務並立即傳回。這就是為什麼用於儲存聚合結果的 FinalData 以未定義形式傳回:該函數在查詢完成並收集資料之前退出。
要解決此問題,我們需要利用 Promise,它透過提供處理非同步任務流程的結構化方法來促進非同步程式設計。 Promise 允許我們定義一個在非同步任務完成時執行的函數。
實作Promise:
考慮這些概念,修改後的 getPrayerInCat 函數如下:
function getPrayerInCat(data) { var promises = data.map(function(data2) { var id = data2.id; return find({ prayerCat: id }) .then(function(prayer) { if (!prayer) data2.prayersCount = 0; else data2.prayersCount = prayer.length; return data2; }); }); return Q.all(promises); }
以上是如何在 MongoDB 中處理循環內的非同步資料檢索?的詳細內容。更多資訊請關注PHP中文網其他相關文章!