亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

等待 forEach 從數據庫獲取數據

等待 forEach 從數據庫獲取數據

繁花不似錦 2023-09-07 16:54:26
我正在嘗試實現 forEach 從 mongo 數據庫獲取數據并將每個數據推送到數組。我需要在推送所有數據后控制臺記錄該數組。我嘗試了承諾,但無法得到想要的結果。這是我所擁有的count=[];array.forEach((data)=>{    userDetailsModel.find({UpdateStatusDate:data}).countDocuments()    .exec((err,data)=>{count.push(data)}) })謝謝你的幫助!
查看完整描述

3 回答

?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

您錯過了應用于一系列承諾的承諾模式的要點。


Exec將返回一個僅針對數據數組的一個元素進行解析的承諾。因此,您將對數組中的每個數據都有一個承諾,并且您的代碼必須等待所有承諾都得到解決。請記住,這將導致數組中的每個數據執行一次 Mongo 查詢。


最好的方法是將數據數組映射到 Promise 數組,并用于Promise.all等待所有 Promise 解析:


// get an array of promises for each data to query:

let promises = array.map(data => { 

    return userDetailsModel

        .find({UpdateStatusDate:data})

        .countDocuments()

        .exec(); 


});

    

// when all the promises fulfill 

Promise.all(promises).then(counts => {

    console.log(counts);

    // for each counts log the result:

    counts.forEach(result => { console.log(result); });

});


查看完整回答
反對 回復 2023-09-07
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

您可以使用Promise.all()方法在所有承諾之后等待

let count = [];

const promiseArray = array.map((data) => (

? new Promise((resolve) => {

? ? userDetailsModel.find({ UpdateStatusDate: data })

? ? ? .countDocuments()

? ? ? .exec((err, data) => { resolve(data) })

? })

))

Promise.all(promiseArray).then((values) => {

? count = values;

? console.log(count);

});


查看完整回答
反對 回復 2023-09-07
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

確保你的函數async前面有關鍵字,你就可以開始了


let count = await Promise.all(

  array.map(data =>

    userDetailsModel

      .find({ UpdateStatusDate: data })

      .countDocuments()

      .exec()

  )

);

consle.log(count);


查看完整回答
反對 回復 2023-09-07
  • 3 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號