2013-04-09 61 views
0

有沒有辦法來運行代碼順序在node.js中的,我試圖運行下面的代碼和它,我的鼻涕如預期工作如何實現代碼順序流

for(var i =0; i < userList.length; i++) { 
console.log("============userList========="+userList[i]); 

    Db.findOne({"_id" : Number(userList[i])}, { "flag" : 1 }, function(err, result) { 
    if(result && (result.get("flag.notify") === true)) { 
     console.log("========my condition========="+result); 
    } 
    }); 
} 

console.log("===reached here==="); 
callback(null, MyResult); 

我想要的上面的代碼來迭代和檢查數據庫中的條件,但這不會發生在這裏。任何線索?

+0

代碼實際上是不是迭代或者你只是想在callback()之前完成檢查? – 2013-04-09 11:38:48

+1

假設@AndreasHultgren是正確的,請查看使用'async'庫的['each'](https://github.com/caolan/async#eacharr-iterator-callback)或'eachSeries'方法。很多關於這個話題的現有問題。 – JohnnyHK 2013-04-09 11:57:03

回答

0

有一個非常好的node.js庫「async」用於管理異步環境中的控制流。對於這個特定的issuse https://github.com/caolan/async#forEach系列可以幫助你解決這個問題

async.forEachSeries(userList,function(user,cb){ 
console.log("============userList========="+user); 

Db.findOne({"_id" : Number(user)}, { "flag" : 1 }, function(err, result) { 
if(result && (result.get("flag.notify") === true)) { 
    console.log("========my condition========="+result); 
} 
cb(); 
}); 
},function(err){ 
console.log("===reached here==="); 
callback(null, MyResult); 
}) 

可能有一些語法問題,但它顯示了有關解決您的問題的一些方向。