[英]async trouble in NodeJS and MongoDB
我正在嘗試創建一個數組,該數組應該有一個帶有開放引號的項目。 我在 Mongo 中有一個帶有鍵“open_quotation”的 Items DB,如果該項目沒有報價 => open_quotation:null。 我想 map 所有數組項目並檢查是否有此項目的任何未結報價,如果有未結報價 - 我想將其推送到我創建的另一個陣列,並發送給客戶。 問題是,當我對項目數組執行 map 方法時,它是異步 function 並且在發送響應之后我已經得到了一個數組......所以客戶端將它作為一個空數組接收。 請幫助解決這個問題。
const{items}= req.body;
const quotations=[];
items.map(async item=>{ const i=await Item.findOne({_id: item._id})
if(i){
`if(i.openquotation){ quotations.push(i)}`
return
)}
res.send({response: true, quotations:quotations})
`````
你能試試嗎:
try {
const response = await Promise.all(items.map(item => Item.findOne({_id: item._id})));
const quotations = response.filter((elem) => !!elem.openquotation);
res.send({ response: true, quotations });
} catch (error) {
res.send({ response: false, error });
}
當你運行mainFunction()
時, mainFunction
調用getData()
let async = require('async');
let q = require('q');
const mainFunctio = async()=>{
const{items}= req.body
console.log("start")
resultFromFindLoob = await getData(items)
console.log("finish");
console.log(resultFromFindLoob)
}
const getData = async (items)=>{
let defer =q.defer();
let result = []
async.eachSeries(items , async(item)=>{ // like a for
try {
let i = await Item.findOne({_id: item._id}).lean();
//do something for result (processing)
if(i)
result.push(i)
} catch (error) {
console.log(error)
}
},()=>{ //callback when finish loop
console.log("finish findone() loop")
defer.resolve(result)//return the result
})
return defer.promise
}
mainFunctio()
mainFunction() 基於 console.log 的結果
1.start mainFunction
2.start getData
3.finish find loop getData
4.finish mainFunction
5.final result : .....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.