Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何突破async.js映射';当满足条件时,调用迭代器循环_Javascript_Node.js_Async.js - Fatal编程技术网

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 is
async.map
?要映射数据数组(edate-->date),如果您想使用某种方法,例如,可以使用return
true
中断迭代。