【问题标题】:Async series is not calling properly异步系列未正确调用
【发布时间】:2018-12-06 17:40:50
【问题描述】:

我有 3 个函数必须一个接一个地调用。但是第一个功能正在执行,并且在第二个和第三个之间正在执行。

var tasklist=[api_hit,delay,mysql_check];
    if(task_list.length>0){          
      async.series(
        tasklist,
        function(err, response) {
          console.log(err);              
          console.log(response);
          results.data=response;
          results.message="Completed";
          console.log(results);                      
        }
      );
    }

内部函数:

function api_hit(callback){
  console.log("Inside api");
  var ele=task_list[0];
  var apidata=[]; 
  var msg={'data':[]};       
  apiinfo.forEach((item,key)=>{               
    if(item.Method_name==ele.Parameters){
      //Here checking random Int value
      if(item.Value=="{{$randomInt}}"){
        item.Value = generate(25);
      }
      apidata.push(item);
    }
  });
  var data=[];
  data['api']=apidata;   
   apiModel.validateAPI(data,function(res){
    console.log("result api");
    msg.data=res; 
    msg.case='api_hit'; 
    callback(msg);
  });
}
function delay(callback){
  console.log("Inside delay");
  var msg={'data':[]};
  global_vars.sleep(1000);
  msg.data='success';
  msg.case='task';
  console.log("after delay");
  callback(msg);
}

function mysql_check(callback){
  console.log("inside mysql");
  var ele=task_list[2];
  var dbdata=[];      
  var msg={'data':[]};
  dbchecks.forEach((item,key)=>{               
    if(item.query_id==ele.Parameters){
  console.log(item.query+" ::: "+ele.Parameters);
      dbdata.push(item);
    }
  });
  data['dbdata']=dbdata;
  apiModel.checkmysql(data,function(err,res){    
    if(err) throw err;
    console.log("inside mysql res");
    msg.data=res;
    msg.case='task2';         
    callback(msg);
  });
}

我的意图是在完成其他函数后调用这些函数,所有结果都必须在单个变量中处理。但是在 api_hit 方法中,当它执行其中的另一个函数时,延迟()(异步的第二个函数)正在执行。如何阻止它并按顺序制作。提前致谢。

【问题讨论】:

    标签: node.js async.js


    【解决方案1】:

    回调函数的第一个参数是错误,如果成功则传递null。

    'use strict'
    const async = require('async')
    
    function api_hit(callback) {
        setTimeout(() => {
            console.log('Completed api_hit')
            callback(null, 'api_hit')
        }, 1000)
    }
    
    function delay(callback) {
        setTimeout(() => {
            console.log('Completed delay')
            callback(null, 'delay')
        }, 100)
    }
    
    function mysql_check(callback) {
        setTimeout(() => {
            console.log('Completed mysql_check')
            callback(null, 'mysql_check')
        }, 500)
    }
    
    var tasklist = [api_hit, delay, mysql_check];
    if (tasklist.length > 0) {
        async.series(
            tasklist,
            function (err, response) {
                console.log(err);
                console.log(response);
            }
        );
    }
    

    文档链接:https://caolan.github.io/async/docs.html#series

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      相关资源
      最近更新 更多