Javascript 如果满足条件,则完全断开异步
如何使async.each循环中断,并在满足条件时返回特定值/错误。例如,在本例中,如果状态存在,我希望从函数“check”返回一些内容,而不是遍历其余的项。有什么建议吗Javascript 如果满足条件,则完全断开异步,javascript,node.js,hapijs,Javascript,Node.js,Hapijs,如何使async.each循环中断,并在满足条件时返回特定值/错误。例如,在本例中,如果状态存在,我希望从函数“check”返回一些内容,而不是遍历其余的项。有什么建议吗 const check = (condition) => { if (condition === 100) { async.each(items, (item, callback) => { if (status) {
const check = (condition) => {
if (condition === 100) {
async.each(items, (item, callback) => {
if (status) {
callback(Boom.conflict('Conflict'));
} else {
// some logic
callback(destroyInstance);
}
});
}
};
这看起来像是这个问题的重复: 看看答案,它应该对你有帮助。在这种情况下,它是另一个异步循环中的嵌套异步,但答案仍然有效 编辑: 解决方案如该线程所示,但没有额外的层,如下所示:
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
}
});
async.each在items数组中的每个项上并行工作。看起来在任何情况下都不可能停止操作,因为此处项的执行顺序不确定。我想您应该改用async.eachSeries 因此,每当满足条件时,您应该做的是抛出一个错误返回callbackerr,它将停止进一步执行。如果您想发送一些值而不是抛出和error,您可以假装发送一个错误,在检查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, //...);
});
告诉我它是否有效 您需要在check函数中有一个回调参数,这样您就可以使用hapi的处理程序进行回复。很高兴听到这个消息!请将此标记为答案,以便其他人也可以使用。我将继续并在这里添加另一个问题的解决方案,因为它与该问题略有不同。