如果条件满足,则完全脱离异步
Break out of async completely if condition met
如何在满足条件时创建 async.each 循环中断和 return 特定值/错误。例如,在这种情况下,如果状态存在,我希望 return 函数 'check' 中的某些内容,而不是遍历其余项目。有什么建议吗?
const check = (condition) => {
if (condition === 100) {
async.each(items, (item, callback) => {
if (status) {
callback(Boom.conflict('Conflict'));
} else {
// some logic
callback(destroyInstance);
}
});
}
};
这看起来像是这个问题的重复:
Break out of javascript nested async.each loop but continue main loop
看看答案,应该对你有帮助。在那种情况下,它是另一个异步循环中的嵌套异步,但答案应该仍然有效。
编辑:
如该线程中所示但没有额外层的解决方案如下:
async.each(subArray, function(item, callback) {
if (SOME_CONDITION) {
// Break out of async
var err = new Error('Broke out of async');
err.break = true;
return callback(err);
}
// continue
callback();
}, function(err) {
if (err && err.break) {
// Handle break out of async here
} else {
// Otherwise handle here
}
});
As async.each 并行处理项目数组中的每个项目。看起来不可能在任何情况下停止操作,因为项目的执行顺序在这里不确定。我猜你应该改用 async.eachSeries。
因此,只要满足条件,您应该做的就是抛出错误 (return callback(err))
,这将停止进一步执行。如果你想发送一些值而不是抛出错误,你可以假装发送一个错误,并在检查 async.eachSeries 的主要回调时检查你从 iteratee 回调中获得的值的类型功能如您所见,例如:
async.eachSeries(items, function iteratee(item, callback) {
if (status) {
return callback(E/V); // error(E) or value(V) u want to send to the done function
} else {
// some logic
callback();
}
}, function done(e) {
if(e){
if(type of e === TYPE OF RETURN VALUE U WANTED) // or any other logic u can come up with
return cb(null, e);
else return cb(e);
}
else cb(null, //...);
});
告诉我它是否有效。
如何在满足条件时创建 async.each 循环中断和 return 特定值/错误。例如,在这种情况下,如果状态存在,我希望 return 函数 'check' 中的某些内容,而不是遍历其余项目。有什么建议吗?
const check = (condition) => {
if (condition === 100) {
async.each(items, (item, callback) => {
if (status) {
callback(Boom.conflict('Conflict'));
} else {
// some logic
callback(destroyInstance);
}
});
}
};
这看起来像是这个问题的重复:
Break out of javascript nested async.each loop but continue main loop
看看答案,应该对你有帮助。在那种情况下,它是另一个异步循环中的嵌套异步,但答案应该仍然有效。
编辑:
如该线程中所示但没有额外层的解决方案如下:
async.each(subArray, function(item, callback) {
if (SOME_CONDITION) {
// Break out of async
var err = new Error('Broke out of async');
err.break = true;
return callback(err);
}
// continue
callback();
}, function(err) {
if (err && err.break) {
// Handle break out of async here
} else {
// Otherwise handle here
}
});
As async.each 并行处理项目数组中的每个项目。看起来不可能在任何情况下停止操作,因为项目的执行顺序在这里不确定。我猜你应该改用 async.eachSeries。
因此,只要满足条件,您应该做的就是抛出错误 (return callback(err))
,这将停止进一步执行。如果你想发送一些值而不是抛出错误,你可以假装发送一个错误,并在检查 async.eachSeries 的主要回调时检查你从 iteratee 回调中获得的值的类型功能如您所见,例如:
async.eachSeries(items, function iteratee(item, callback) {
if (status) {
return callback(E/V); // error(E) or value(V) u want to send to the done function
} else {
// some logic
callback();
}
}, function done(e) {
if(e){
if(type of e === TYPE OF RETURN VALUE U WANTED) // or any other logic u can come up with
return cb(null, e);
else return cb(e);
}
else cb(null, //...);
});
告诉我它是否有效。