Javascript 如何从Node.js中的异步循环返回
使用库进行流控制时,特别是async.forEach,当需要跳过特定项时,如何正确执行回调 例如:Javascript 如何从Node.js中的异步循环返回,javascript,node.js,asynchronous,node-async,Javascript,Node.js,Asynchronous,Node Async,使用库进行流控制时,特别是async.forEach,当需要跳过特定项时,如何正确执行回调 例如: async.forEach(bigCollection, function(item, callback) { if(skipThis) { return callback(); // OR BELLOW IS BETTER?? //return process.nextTick(callback); } db.query
async.forEach(bigCollection, function(item, callback) {
if(skipThis) {
return callback();
// OR BELLOW IS BETTER??
//return process.nextTick(callback);
}
db.query(query, callback);
}, callback);
如果我不使用process.nextTick(callback)
的话,如果bigCollection太大,我是否有可能遇到堆栈溢出?如果我使用了process.nextTick(callback)
我会破坏我的代码吗
我已经习惯了用
过程。nextTick(回调)
的方式,但是我不确定这样做是否是一种好的做法。我想说,没有nextTick就可以了
async.forEach(bigCollection, function(item, callback) {
if(skipThis) {
return callback();
}
db.query(query, callback);
}, callback);
如果bigCollection太大,那么在进入循环之前,您将获得溢出。堆栈溢出?你为什么会碰到这个?我看不出为什么第一种解决方案会导致这种情况,而第二种解决方案不会。另一方面,如果您的集合非常大,那么停止考虑半解决方案,只需将其划分为更小的部分,并逐块处理(例如,您可以将所有内容包装到
async.series
中,并在每个部分中运行async.forEach
)。