0

Seq([644511,340755])async function からの応答に渡したいですgetProjects

だから私は試しました

...
var ids = pivotal.getProjects(function (err, data) {
  var ids = data.project.map(function(x) { return parseInt(x.id); });
  console.log("IDS_i: ".red + ids);
});
console.log("IDS_e: ".red + ids);

Seq(ids)
  .parEach(function(project_id) {
....

ログ:

IDS_e: undefined
GET /stories 200 34ms
GET /favicon.ico 404 2ms
IDS_i: 644511,340755

私は多分私はこれを入れるべきだと思っていますSeq:

Seq()
   .seq(function() {
      pivotal.getProjects(function (err, data) {
        data.project.map(function(x) { return parseInt(x.id); });
      });
    }

しかし、その場合にIDを配列として返す方法は?

4

1 に答える 1

1

getProjectsも非同期です。基本的なルール: 非同期関数から値を返すことはできません。コールバック関数ですべての処理を行う必要があります。配列が集約される前に実行が続行されます。だからあなたのseqアプローチはあなたが必要とするものです:

Seq()
    .seq(function() {
        pivotal.getProjects(this);
    })
    .flatten()
    .seqEach(function(project) {
        var projectId = project.id;
        myService.someOtherAsyncAction(projectId, this);
    });

node-seqコールバック関数として非同期関数に渡すことにより、コールバックの結果を次のseqステップに渡すように処理します。thisこれが、フローと結果が次のステップに渡される方法です。次のステップで実行できるように、flattenそれぞれがスタック上の個々の要素として利用可能であることを確認します。projectseqEach

于 2013-03-29T20:28:08.300 に答える