首頁 >web前端 >js教程 >如何在 JavaScript 循環中從多個資料庫查詢傳回資料?

如何在 JavaScript 循環中從多個資料庫查詢傳回資料?

DDD
DDD原創
2024-11-14 22:19:02369瀏覽

How can I return data from multiple database queries within a loop in JavaScript?

循環中多個資料庫查詢回傳資料的問題

在循環中執行多個資料庫查詢時,處理非同步操作至關重要正確地確保在將資料傳回給您的客戶端之前檢索所有資料。

在提供的程式碼中, getPrayerInCat 函式使用 forEach 回呼執行多個 MongoDB 查詢。但是,程式碼會立即傳回 undefined,因為函數不會等待所有資料庫查詢的結果完成。

要解決此問題,我們在使用 Promise 時必須遵循以下原則:

  1. 每個非同步函數都必須傳回一個 Promise。
  2. 為不傳回 Promise 的函數建立包裝器以實現它們Promise 相容。
  3. 與非同步結果互動的所有內容都應該進入 .then 回呼。

使用這些原則,我們可以建立一個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn