此处date
是一个数组。当if
条件满足时,它必须从迭代器中break
。但由于迭代器,它继续循环。它再次执行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);
}
答案 0 :(得分:1)
如果执行if-condition
,则仅返回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);
}
答案 1 :(得分:0)
致电callback()
或使用break
声明。
答案 2 :(得分:0)
如果希望循环停止,请尝试break;
或return;
。
答案 3 :(得分:0)
_.some
或async.some
在这里很有用。
如果您想对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);
});
}
如果只有同步检查edate中的每个日期
,请使用此选项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:如果你刚开始使用异步编程,请跳过Zalgo的东西。