0

我想传入Seq([644511,340755])来自异步函数的响应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-seqseq通过this作为回调函数传递给您的异步函数来处理将回调的结果传递给下一步。这就是流程和结果传递到下一步的方式。flatten将确保每个project元素都可以作为堆栈中的单个元素使用,以便您可以seqEach在下一步中进行操作。

于 2013-03-29T20:28:08.300 回答