2016-02-29 88 views
6

當我鏈接多個承諾時,我期望每個承諾只會在前一個承諾結束後執行。不知怎的,它沒有發生。我敢肯定,使用錯誤的承諾,併爲一些解釋很想......nodeJS中的承諾/承諾/執行順序中的回調不正確

我有這樣的代碼:

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

我期待得到如下的輸出:

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

但是相反我得到這個輸出:

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

我得到什麼錯誤?

回答

9

您需要返回的承諾

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

​​3210

忽視詞彙this或詞彙arguments部分,

() => {1}翻譯成

function() { 1 } // return undefined 

() => 1轉化爲

function() { return 1 } 
+0

感謝了很多人! –