因链而在同步操作中使用promises

时间:2015-11-04 01:46:01

标签: javascript bluebird

我有这个链:

phase_one(files).then(phase_two).then(phase_three).then(phase_four);

每个阶段都会收到包含目标文件的数组。在每个阶段中,我都有这段默认代码:

  return Promise.map(files, function(file) {
    // some code here
  }, {
    concurrency: 3000
  });

问题是.. phase_two是同步的...但我仍然想要使用链我不应该使用Promise.map。

我想知道蓝鸟是否有任何可以帮助我的事情。我在文档中搜索,但我没有找到。

感谢。

1 个答案:

答案 0 :(得分:0)

phase_two可以只是一个返回值的函数。链条将继续正常。

phase_one(files).then(phase_two).then(phase_three).then(phase_four);

function phase_two(input) {
    // do something
    return result;
}

.then()处理程序可以是同步的,也可以是异步的。如果它是异步的,那么它必须返回一个promise。如果它是同步的,它只能返回一个值,该值将成为传递给链的下一部分的值。

链中的第一个链接必须返回一个promise(以启动链)。如果phase_one()是同步的,并且您希望保持之前的结构,那么您可以return Promise.resolve(data);内的phase_one()。这将使返回值成为具有.then()处理程序的承诺。