与循环功能任务列表节点js异步

时间:2018-04-03 06:23:34

标签: node.js asynchronous

您好我在我的代码中使用async parallel练习代码

var tasklist = [],tempjson={};
for(var i = 0; i < 10; i++)  {
   tempjson.data = 'i is' + i;
   for(var j = 0; j < 20; j++){
      tasklist.push(doSomething(tempjson,j));
   }
}
 async.parallel(taskList, function(err, data) {
       console.log(data);
 });

function doSomething(params,j){
       params.data2 = 'j value is'+ j
       return callback(null,params)
}

想做类似的事情,但我收到错误,回调未定义,有人可以帮我解决代码有什么问题

2 个答案:

答案 0 :(得分:1)

您没有将callback作为参数传递给函数doSomething

只需添加回调参数,如

function doSomething(params,j){
     return function(callback){
       params.data2 = 'j value is'+ j
       return callback(null,params)
     }   

}

这将解决问题!!

答案 1 :(得分:1)

  

ReferenceError:未定义回调

这是因为您未将callback传递给doSomething()。根据{{​​3}},我们需要将回调传递给函数。

此外,您的代码中存在拼写错误。它是tasklist而不是taskList

解决这个问题,

  var tasklist = [], tempjson = {};
  for (var i = 0; i < 10; i++) {
    tempjson.data = 'i is' + i;
    for (var j = 0; j < 20; j++) {
      tasklist.push(function (callback) {
        doSomething(tempjson, j, callback);
      }); // Array of task as per docs
    }
  }
  async.parallel(tasklist, function (err, data) {
    console.log(data);
  });

  function doSomething(params, j, callback) { // passing callback as per docs
    params.data2 = 'j value is' + j;
    return callback(null, params)
  }

这将记录

  

[{数据:&#39;我是9&#39;,数据2:&#39; j值是20&#39; },
    {data:&#39;我是9&#39;,数据2:&#39; j值是20&#39; },
    ...... ......还有100件商品]