循環中多個資料庫查詢回傳資料的問題
在循環中執行多個資料庫查詢時,處理非同步操作至關重要正確地確保在將資料傳回給您的客戶端之前檢索所有資料。
在提供的程式碼中, getPrayerInCat 函式使用 forEach 回呼執行多個 MongoDB 查詢。但是,程式碼會立即傳回 undefined,因為函數不會等待所有資料庫查詢的結果完成。
要解決此問題,我們在使用 Promise 時必須遵循以下原則:
使用這些原則,我們可以建立一個getPrayerCount 函數的版本,該函數傳回Promise:
function getPrayerCount(data2) { var id = data2.id; return find({prayerCat:id}) .then(function(prayer) { if (!prayer) data2.prayersCount = 0; else data2.prayersCount = prayer.length; return data2; }); }
要處理多個非同步任務並等待它們完成,我們可以使用Q.all:
function getPrayerInCat(data) { var promises = data.map(getPrayerCount); // don't use forEach return Q.all(promises); }
透過從getPrayerInCat 函數傳回一個Promise,我們可以等待所有查詢完成後再傳回結果。
以上是如何在 JavaScript 循環中從多個資料庫查詢傳回資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!