Javascript 如何突破async.js映射';当满足条件时,调用迭代器循环
这里的Javascript 如何突破async.js映射';当满足条件时,调用迭代器循环,javascript,node.js,async.js,Javascript,Node.js,Async.js,这里的date是一个数组。当条件满足时,它必须从迭代器中中断。但由于迭代器,它继续循环。它再次执行if条件,并抛出错误“发送后无法设置头”。一旦迭代器执行了if条件,我就必须跳出迭代器 validatemultiday: function(req, callback) { async.map(edate, function iterator(date, mapCb) { var rangedate = moment(date).format("YYYY-MM-DD"); if
date
是一个数组。当条件满足时,它必须从迭代器中中断。但由于迭代器,它继续循环。它再次执行if
条件,并抛出错误“发送后无法设置头”。一旦迭代器执行了if
条件,我就必须跳出迭代器
validatemultiday: function(req, callback) {
async.map(edate, function iterator(date, mapCb) {
var rangedate = moment(date).format("YYYY-MM-DD");
if (rangedate == studentfromdate || rangedate == studenttodate) {
sails.log.info("does1");
callback(null, 1);
} else {
sails.log.info("do2");
mapCb(null, 2);
}
}, callback);
}
调用callback()
或使用break
语句。尝试break代码>或返回代码>当您希望循环停止时。如果执行了条件,则仅返回false。它正在工作
validatemultiday: function(req,callback){
var range = true;
async.map(edate, function iterator (date, mapCb){
var rangedate = moment(date).format("YYYY-MM-DD");
if(rangedate==studentfromdate||rangedate==studenttodate){
sails.log.info("does2");
range=false;
mapCb(null,range);
}
else{
sails.log.info("did2");
if(range==false){
mapCb(null,range);
}
else{
range=true;
sails.log.info('2:'+range);
mapCb(null,range);
}
}
});
setTimeout(function(){
callback(null,range);
},100);
}
或者在这里有用
如果要对edate中的每个日期执行一些异步操作,请使用此选项
validatemultiday: function(req, callback) {
async.some(edate, function iterator(date, someCb) {
var rangedate = moment(date).format('YYYY-MM-DD');
var isOnRange = (rangedate == studentfromdate || rangedate == studenttodate);
// sample async operation: fs.exists
return fs.exist(rangedate, someCb);
}, function(result) {
sails.log.info('validatemultiday', 'result', result);
return callback(null, result ? 1 : 2);
});
}
validatemultiday: function(req, callback) {
var result = _.some(edate, function(date) {
var rangedate = moment(date).format('YYYY-MM-DD');
var isOnRange = (rangedate == studentfromdate || rangedate == studenttodate);
return isOnRange;
});
return callback(null, result ? 1 : 2);
// Zalgo alert: Ideally below return statement should be used in place of above one because above code is synchronous to contain Zalgo.
// return async.nextTick(function() {
// return callback(null, result ? 1 : 2);
// });
}
如果edate中只有同步检查每个日期,则使用此选项
validatemultiday: function(req, callback) {
async.some(edate, function iterator(date, someCb) {
var rangedate = moment(date).format('YYYY-MM-DD');
var isOnRange = (rangedate == studentfromdate || rangedate == studenttodate);
// sample async operation: fs.exists
return fs.exist(rangedate, someCb);
}, function(result) {
sails.log.info('validatemultiday', 'result', result);
return callback(null, result ? 1 : 2);
});
}
validatemultiday: function(req, callback) {
var result = _.some(edate, function(date) {
var rangedate = moment(date).format('YYYY-MM-DD');
var isOnRange = (rangedate == studentfromdate || rangedate == studenttodate);
return isOnRange;
});
return callback(null, result ? 1 : 2);
// Zalgo alert: Ideally below return statement should be used in place of above one because above code is synchronous to contain Zalgo.
// return async.nextTick(function() {
// return callback(null, result ? 1 : 2);
// });
}
:跳过Zalgo stuff,如果您刚刚开始异步编程。我已经使用了回调,但它会继续迭代,如果条件返回错误,它会再次执行。。将回调传递给async.map(edate,function iterator(date,mapCb){In if condition如果我更改回调-->mapCb,它将输出返回为[1,2,1]。我想在执行if condition后返回输出[1]。what isasync.map
?要映射数据数组(edate-->date),如果您想使用某种方法,例如,可以使用returntrue
中断迭代。