2014-10-15 7 views
0
promise.each(function(obj){ 
    obj.doIntensiveWork() 
    .then(function(){ 
     console.log("I AM FIRST") 
    }) 
}) 
.then(function(){ 
    console.log("I AM SECOND") 
}) 

скажем, doIntensiveWork() занимает довольно много времени для выполнения. «Я ЕСМЬ» будет зарегистрирован до «Я ЕСМЬ ПЕРВЫЙ», так как each разрешен как doIntensiveWork() называется (но не выполняется) на каждом объекте. Это верно?Выполнение обещания после завершения каждой петли

Если да, то как я могу перевернуть это, чтобы убедиться, что «Я ЕСМИТЕ ВТОРОЙ» получает вход только один раз и после последнего «Я ПЕРВЫЙ» журнала? Я использую Bluebird API

+0

, что в 'promise' вар? массив обещаний - это правильно? –

+0

это обещание, которое содержит коллекцию объектов –

ответ

3

Вы правы в том, что каждый из них не доживет, когда интенсивная работа будет завершена. Вы можете «присоединиться» все интенсивную работу, используя функцию map (не забудьте return)

promise.map(function(obj){ 
    return obj.doIntensiveWork() 
    .then(function(){ 
     console.log("I AM FIRST") 
    }) 
}) 
.then(function(){ 
    console.log("I AM SECOND") 
})