2016-11-06 224 views
0

當嘗試寫異步DynamoDB通話功能的包裝類,我失敗的嘗試來包裝所有的return語句以函數調用爲:如何將函數作爲參數傳遞給TypeScript中的Promise?

function composePromise(method: (params: any, callback: (err, res) => void) => void, params: any): Promise<any> { 
    return new Promise<any>((resolve, reject) => 
     method(params, (err, res) => { 
      if (err) reject(err); 
      else resolve(res); 
     }) 
    ); 
} 

create(params: any): Promise<any> { 
    return composePromise(this._db.put, params); 
} 

這是奇怪的,因爲畢竟我在create移動承諾沒有任何改變,它的工作。

create(params: any): Promise<any> { 
    return new Promise<any>((resolve, reject) => 
     this._db.put(params, (err, res) => { 
      if (err) reject(err); 
      else resolve(res); 
     }) 
    ); 
} 

所以我猜測這可能是一些封閉的問題,但無法弄清楚爲什麼。任何人都可以幫助我嗎?

回答

1

我認爲this._db.put可能是this._db上聲明的某個其他函數的一個快捷方式,如果是這樣,那麼該方法可能使用this,那就是它失敗的地方。

你應該正確的上下文綁定到功能

create(params: any): Promise<any> { 
    return composePromise(this._db.put.bind(this._db), params); 
} 
+0

謝謝你這麼多,它的工作原理!這個'bind'函數是否會在它的閉包中保留this,以便稍後調用此函數時可以找到它? –

+0

抱歉,但我不明白你的問題,你指的是哪一種背景? bind函數在不修改this._db.put的情況下創建一個包裝函數 –

相關問題