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);
      }
    }
  );
};

これにより、手順を進めることができます。

個人的には、次の 2 つの理由から非同期を好むことに注意してください。

  • 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 に答える