2016-02-29 27 views
6

Quando concateno più promesse, mi aspetto che ogni promessa venga eseguita solo dopo che è terminata la precedente. In qualche modo non è successo. Sono sicuro che con promesse di sbagliato, e mi piacerebbe qualche spiegazione ...Promesse in nodoJS/una richiamata all'interno di una promessa/ordine di esecuzioni non è corretta

ho questo codice:

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) 
    }) 
} 

mi aspettavo di ottenere questo output:

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

Ma invece Ottengo questo risultato:

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

Cosa mi sto sbagliando?

risposta

9

è necessario restituire la promessa

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

o

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

Ignorando lessicale this o lessicale arguments parte,

() => {1} traducono in

function() { 1 } // return undefined 

e () => 1 traducono in

function() { return 1 } 
+0

Grazie uomo molto! –