Node.js中的异步OR步骤

时间:2012-07-18 02:22:48

标签: node.js asynchronous

我无法让我的异步代码与node.js一起使用

尝试异步和步骤库 - 代码只返回第一个函数(似乎没有完成其余的)。我做错了什么?

谢谢!

var step = require('step');
step(
function f1(){
        console.log('test1');
},
function f2(){
        console.log('test2');
},
function finalize(err) {
    if (err) { console.log(err);return;}
    console.log('done with no problem');
  }
);

或者这个:

var async = require('async');
async.series([
function f1(){
        console.log('test1');
},
function f2(){
        console.log('test2');
},
function finalize(err) {
    if (err) { console.log(err);return;}
    console.log('done with no problem');
  }
]);

2 个答案:

答案 0 :(得分:3)

Step.js期待每一步的回调。使用Step的函数也应该回调结果而不是返回它。

所以,让我们说你有:

function pullData(id, callback){
  dataSource.retrieve(id, function(err, data){
    if(err) callback(err);
    else callback(data);
  });
}

使用Step就像:

var step = require('step');

function getDataFromTwoSources(callback){
  var data1,
    data2;
  step(
    function pullData1(){
      console.log('test1');
      pullData(1, this);
    },
    function pullData2(err, data){
      if(err) throw err;
      data1 = data;
      console.log('test2');
      pullData(2, this);
    },
    function finalize(err, data) {
      if(err)
        callback(err);
      else {
        data2 = data;
        var finalList = [data1, data2];
        console.log('done with no problem');
        callback(null, finalList);
      }
    }
  );
};

这将使它继续完成这些步骤。

请注意,我个人更喜欢异步,原因有两个:

  • Step捕获所有抛出的错误并对它们进行回调;当这些库只是清理代码外观时,这会改变应用程序的行为。
  • Async有更好的组合选项,看起来更干净

答案 1 :(得分:2)

我只能跟async说话,但是为了那个你传递给async.series的数组中的匿名函数必须调用callback参数,当函数是函数时,它会传递给那些函数。完成了它的处理。如:

async.series([
    function(callback){
        console.log('test1');
        callback();
    },
    function(callback){
        console.log('test2');
        callback();
    }
]);