2016-02-29 34 views
6

Khi tôi đang ghép nhiều lời hứa, tôi hy vọng rằng mỗi lời hứa sẽ chỉ thực hiện sau lần kết thúc trước. Bằng cách nào đó nó không xảy ra. Tôi chắc chắn rằng sử dụng những lời hứa sai, và rất thích cho một số lời giải thích ...Lời hứa trong nodeJS/cuộc gọi lại trong lời hứa/lệnh thực hiện không đúng

I Have mã này:

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

Tôi đã chờ đợi để có được kết quả này:

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

Nhưng thay vì Tôi nhận được kết quả này:

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

Tôi gặp vấn đề gì?

Trả lời

9

Bạn cần phải trả lại lời hứa

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

hoặc

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

Bỏ qua từ vựng this hoặc từ vựng arguments phần,

() => {1} dịch để

function() { 1 } // return undefined 

() => 1 dịch để

function() { return 1 } 
+0

Cảm ơn một người đàn ông rất nhiều! –

Các vấn đề liên quan