【发布时间】:2015-02-05 08:02:36
【问题描述】:
我在 Nodejs 中并发执行查询时遇到问题。 首先我从mysql读取所有数据,大约有5000条记录。然后在 Mongo 中检查所有这些记录,然后更新回 mysql。 什么方法最好?我正在考虑使用异步模块先执行记录限制,然后继续。可以吗? 类似的东西:
async.whilst(
function() {return ..;},
function(callbackOut) {
record1,record2,record3
async.parallel([
function(record1),function(record2),function(record3)
]),
function() {
callbackOut();
} ..
}
编辑:我刚刚检查了 async.eachLimit(根据 freele 的建议),它比结合 while 和 parallel 更好。但这是另一种更好的方式吗?比如 fork new childprocess 或 ..?
【问题讨论】:
-
如果您使用回调,则可以使用 async,如果您更喜欢 Promise,则可以使用 Q。我认为您不需要
whilst,因为我认为您应该使用each(或者如果您需要限制,则使用eachLimit)。或者async.parallel([ function(){ ... }, function(){ ... } ], callback);就足够了。你打算在你的第一个函数中返回什么? -
我将返回 mongo 中每条记录的 id。当并行功能完成时,我会将它推入一个数组,这不是问题。我只是不知道“[function(){ ... }, function(){ ... } ]”要填什么,因为它只是一个有很多价值的函数。
-
每个函数都是一种
function(object, done){..}的函数,其中 done() 在完成与对象的异步内容后调用。 -
年,我认为 eachLimit 适合我的情况,而不是平行的。谢谢。
标签: node.js