2015-11-08 188 views
0

我有一個類:無法參數傳遞給類方法,

'use strict'; 
class aClass { 
    a() { 
     return new Promise((resolve, reject) => { 
      if (1 != 1) { 
       reject(new Error('error')); 
      } else { 
       resolve('a'); 
      } 
     }); 
    } 
    b(b) { 
     return new Promise((resolve, reject) => { 
      if (1 != 1) { 
       reject(new Error('error')); 
      } else { 
       resolve('b'); 
      } 
     }); 
    } 
    c(c) { 
     console.log(c); 
    } 


    do() { 
     this.a() 
      .then((a) => { 
       this.b(a); 
      }) 
      .then((b) => { 
       console.log(b); 
       this.c(b); 
      }).catch((error) => { 
       console.log('err', error); 
      }); 
    } 
} 

module.exports = aClass; 

當我創建的類的對象,並調用do()方法:

let anObject = new aClass(); 
anObject.do(); 

「undefined」在控制檯中記錄了兩次。這意味着,在b()方法的參數都沒有傳遞給一個承諾的決心:resolve('b');

同時,如果我不使用類的方法,但添加代碼直接進入回調:

do() { 
    this.a() 
     .then((a) => { 
      return new Promise((resolve, reject) => { 
       if (1 != 1) { 
        reject(new Error('error')); 
       } else { 
        resolve('b'); 
       } 
      }); 
     }) 
     .then((b) => { 
      console.log(b); 
      this.c(b); 
     }).catch((error) => { 
      console.log('err', error); 
     }); 
} 

一切正常, 「b」在控制檯中記錄了兩次。

我使用nodejs作爲此示例,babeljs作爲轉換器。 當我使用類方法時,爲什麼不傳遞參數?是否有任何範圍限制,或者它是一個轉譯問題?

+2

如果你'返回this.b(A);'這一切都很好,或刪除{}'左右this.b(一)'它按預期工作再次...學習箭頭函數語法知道爲什麼這是 –

+0

謝謝,我忘了返回一個可靠的對象。 –

回答

1

在:

.then((a) => { 
    this.b(a); 
}) 

你不return荷蘭國際集團任何事情,所以undefined返回代替 - 這是進入

.then((b) => { 
    console.log(b); 
    this.c(b); 
}) 

,無論其記錄並將其傳遞到c,這也記錄它。

試着改變你的代碼:

.then((a) => { 
    return this.b(a); 
}) 
+0

非常感謝。 –