2016-01-22 177 views
1

我正在尋求一些算法建議。比方說,這個想法是你必須做這樣的事情:批量操作一個接一個v.s批量操作

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

感謝一羣@MikeC,這是我正在尋找的確切類型的東西。 – ThomasReggi

回答

0

他們是非常相似的,但有不同的特點:

第二:

  • Promise.props唯一then運行。如果沒有出現錯誤。
  • Promise.props方法可以讓你輕鬆(和更清晰)所有承諾的決議後運行代碼
  • 計算你有O(2 * N)的複雜性

1:

  • 你甚至獲得結果如有錯誤。
  • 您可以實現差錯控制(或還挺重試邏輯爲例)
  • 你必須自己
  • 同步的承諾計算你有O(N)複雜