一个接一个的操作批量操作批量操作

时间:2016-01-22 21:50:49

标签: javascript asynchronous promise

我正在寻求一些算法建议。让我们说这个想法是你必须做这样的事情:

operation.getAnimal('zebra')
  .then(animal => {
    return operation.doSomethingWithAnimal(animal)
  })

但是,不要只是这样做,你需要为许多不同的动物做这件事。

let animals = ['zebra', 'dog', 'cat', 'fish', 'bird']

Promise.map(animals).then(animalName => {
  return operation.getAnimal(animalName)
    .then(animal => {
      return operation.doSomethingWithAnimal(animal)
    })
})

或者您可以这样做:

function props (items, promise) {
  let results = {}
  _.each(items, item => {
    results[item] = promise(item)
  })
  return results
}

Promise.props(props(animals, option.getAnimal))
  .then(gottenAnimals => {
    return Promise.props(props(gottenAnimals, options.doSomethingWithAnimal))
  })

第一个例子会让动物做一些事情,其中​​, 第二个例子将让所有动物随后与它们一起做点什么。

1 个答案:

答案 0 :(得分:0)

它们非常相似但具有不同的功能:

第二

    只有在没有错误发生时,
  • Promise.props的{​​{1}}才会运行。
  • then方法可以让您轻松(更清楚地)在所有承诺解决方案之后运行代码
  • 计算上你有O(2 * N)复杂度

第一

  • 即使出现错误,您也可以获得结果。
  • 您可以实现错误控制(例如,有点重试逻辑)
  • 您必须自己同步承诺
  • 计算上你有O(N)复杂度