gpt4 book ai didi

node.js - 如何将 Q Promise 与 MongoDB Cursor.each() 一起使用?

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:27 26 4
gpt4 key购买 nike

我的代码要点如下:

function checkWinRate(array){
var winCount = 0;
var totalCount = 0;
db.collection.find(query).each( function(foo){
if (condition){
winCount++;
}
totalCount++;
db.close();
});
return winCount/totalCount;
}

这里明显的问题是,在 return 语句中,winCount 和totalCount 仍然等于0。我正在尝试使用Q Promise 库来整理事件序列,但我不确定具体如何实现它。谁能告诉我如何处理 Q?

编辑

ID:10T 此处错误。我忘了我用的是僧侣 wrapper 。对于那些想知道我做了什么来解决这个问题的人,monk 有一个很好的方法来处理 Promise,如下所示:

function checkWinRate(array){
var winCount = 0;
var totalCount = 0;
var promise = db.collection.find(query).each( function(foo){
if (condition){
winCount++;
}
totalCount++;
db.close();
});
promise.success(function(){
return winCount/totalCount);
}

}

最佳答案

您传入 each() 的函数将异步执行。您需要在所有迭代完成后立即返回一个 Promise 并解决它:

var deferred = Q.defer();

db.collection.find(query).each(function(err, item) {
if (err) {
deferred.reject(err);
}

if (condition){
winCount++;
}
totalCount++;

if(item == null) {
// iterations are finished
deferred.resolve(winCount/totalCount);
db.close();
}
});

return deferred.promise;

要获取值,您需要这样调用checkWinRate:

checkWinRate(array).then(function (rate) {});

关于node.js - 如何将 Q Promise 与 MongoDB Cursor.each() 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30387569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com