在同步代码中使用promises

时间:2015-12-11 17:44:57

标签: javascript promise

我想知道在同步代码中使用promises是否错误。

我有一个入口点文件,里面有一个巨大的代码,如:

Promise.resolve(MAP)
  .then((MAP) => {

    return taskOne();
  })
  .then((MAP) => {

    return taskTwo();
  })
  .then((MAP) => {

    return taskThree();
  });

依此类推,直到taskTen。

在每项任务中,我都有同步代码,在最后,我只是回来了 MAP的新值,如:

function taskOne(MAP) {
  // DO SOMETHING

  return MAP;
}

我觉得这样做很好,但我不知道......也许我做错了。

感谢。

1 个答案:

答案 0 :(得分:0)

首先,异步代码几乎总是比同步代码更复杂,所以我从来没有看到过什么时候我想采取一些始终同步并使其异步的东西。使用.then()的promise会强制您的同步代码变为异步。

第二关,你的方案是否使用promises编写,充满了重复的代码。我建议你把它干掉,而不是一遍又一遍地复制相同的序列。当你正在干涸时,你可能会发现不再有理由使用promises,因为你可以以同步的方式更简洁地解决你的问题。

如果所有函数都使用相同的参数,并且您只想将一个函数的返回结果传递给下一个,那么我建议您将函数放在一个数组中并遍历数组并{{1} }是一个内置的设计模式,用于将结果从一个传递到下一个:

.reduce()

仅供参考,如果你的函数实际上是异步并且返回promises,这个模式可以稍微修改一下,但是我不建议你切换到那个,直到你的函数实际上是异步的:

var fns = [taskOne, taskTwo, taskThree, taskFour, taskFive, taskSix, taskSeven, taskEight, taskNine, taskTen];

var final = fns.reduce(function(m, fn) {
    return fn(m);
}, MAP);