7

我无法让我的异步代码与 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');
  }
]);
4

2 回答 2

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 有更好的组合选项,看起来更干净
于 2012-07-18T03:17:25.233 回答
2

我只能说async,但为此,您传递给的数组中的匿名函数async.series必须callback在函数完成处理时调用传递给这些函数的参数。如:

async.series([
    function(callback){
        console.log('test1');
        callback();
    },
    function(callback){
        console.log('test2');
        callback();
    }
]);
于 2012-07-18T03:15:30.473 回答