2016-02-29 20 views
6

Kiedy łączę wiele obietnic, oczekuję, że każda obietnica będzie wykonana dopiero po zakończeniu poprzedniej. Jakoś tak się nie stało. Jestem pewien, używając obietnic źle, i chciałbym jakiegoś wyjaśnienia ...Obietnice w węźleJS/zwrot w ramach obietnicy/kolejności wykonania jest nieprawidłowy

mam ten kod:

var Promise  = require('bluebird'); 

func('A') 
    .then(() => {func('B')}) 
    .then(() => {func('C')}) 
    .then(() => {func('D')}) 

function func(arg) { 
    return new Promise(function(resolve){ 
     console.log('>> ' + arg); 
     setTimeout(function(){ 
      console.log(' << ' + arg); 
      resolve(); 
     }, 200) 
    }) 
} 

Spodziewałem się uzyskać ten wynik:

>> A 
    << A 
>> B 
    << B 
>> C 
    << C 
>> D 
    << D 

ale zamiast Otrzymuję tę wydajność:

>> A 
    << A 
>> B 
>> C 
>> D 
    << B 
    << C 
    << D 

Co ja się mylę?

Odpowiedz

9

Trzeba powrócić obietnicy

func('A') 
    .then(() => {return func('B')}) 
    .then(() => {return func('C')}) 
    .then(() => {return func('D')}) 

lub

func('A') 
    .then(() => func('B')) 
    .then(() => func('C')) 
    .then(() => func('D')) 

Ignorując leksykalnych this lub leksykalnych arguments udział

() => {1} Przekłada się

function() { 1 } // return undefined 

i () => 1 przekłada się

function() { return 1 } 
+0

Dzięki wielkie człowiek! –