异步系列调用不正确

时间:2018-12-06 09:29:08

标签: node.js async.js

我有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方法中,当它正在执行其中的另一个函数时,则执行delay()(异步的第二个函数)。如何停止并按顺序进行。预先感谢。

1 个答案:

答案 0 :(得分:0)

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

for (var key in result.data) {
    if (count == 10) {
        // I want to delay 1 second here
        setTimeout(generate.bind(key, result.data[key]), 1000);
    }
    else
        generate(key, result.data[key])
    count++;
}

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