我正在处理 mongoDb ( https://jira.mongodb.org/browse/SERVER-1243 ) 的限制,这迫使我运行 update()
调用 N 次,直到我最终得到“0”作为更新记录总数 (太棒了呃?)。
所以,我必须改变这个:
_mongoUglyUpdateWrapper: function( querySelector, updateObject, options, cb ){
var self = this;
var total = 0;
self.collection.update( querySelector, updateObject, options, function( err, partialTotal ){
if( err ) return cb( err );
cb( null, partialTotal );
});
},
进入会重复调用 self.collection.update 直到 partialTotal
最终为 0 的状态——此时它终于可以调用回调了。我通常使用异步,但这里有很大不同。
它需要递归,但我不确定解决这个问题的最佳、最简单方法是什么。帮忙?
(题外话:是的,这在性能方面可能是一场灾难,但这就是当您信任新兴技术时所得到的结果;我正在编写的下一层是针对 MySql 的)。 p>
最佳答案
我能想到的最好的方法是命名函数并在该函数内部进行检查:
_mongoUglyUpdateWrapper: function( querySelector, updateObject, options, cb ){
var self = this;
var total = 0;
function checkIfZero( err, partialTotal ) {
if( err ) return cb( err );
if( partialTotal !== 0 ) return self.collection.update( querySelector, updateObject, options, checkIfZero );
cb( null, partialTotal );
}
self.collection.update( querySelector, updateObject, options, checkIfZero );
},
关于javascript - 运行异步函数 N 次,其中 N 取决于调用返回的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418244/