如何使async.each循环中断并在满足条件时返回特定值/错误。例如,在这种情况下,如果状态存在,我希望从函数返回一些内容'检查'而不是迭代其余的项目。有什么建议吗?
<View style={styles.container}>
<ScrollView style={{ flex: 1 }} removeClippedSubviews={true}>
<View style={{ height: 500, width: 350, marginBottom: 15, backgroundColor: 'cyan' }}>
<ViewPagerAndroid style={{ flex: 1 }}>
<View><Text style={{ fontSize: 30 }}>{'Page1'}</Text></View>
<View><Text style={{ fontSize: 30 }}>{'Page2'}</Text></View>
</ViewPagerAndroid>
</View>
<View style={{ height: 500, width: 350, marginBottom: 15, backgroundColor: 'lightblue' }}>
<ViewPagerAndroid style={{ flex: 1 }}>
<View><Text style={{ fontSize: 30 }}>{'Page1'}</Text></View>
<View><Text style={{ fontSize: 30 }}>{'Page2'}</Text></View>
</ViewPagerAndroid>
</View>
</ScrollView>
</View>
答案 0 :(得分:1)
这看起来像是这个问题的重复:
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
}
});
答案 1 :(得分:0)
async.each对items数组中的每个项目并行工作。看起来不可能在任何条件下停止动作,因为这里的项目执行顺序不确定。我想你应该使用async.eachSeries。
因此,只要满足条件,您应该执行的操作是抛出错误(return callback(err))
,这样做会停止执行。如果你想发送一些值而不是抛出和错误,你可以假装发送一个错误,并在检查async.eachSeries的主回调时,你只需要检查你从iteratee回调函数获得的值的类型为u可以看到例如:
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, //...);
});
告诉我它是否有效。