2017-01-19 51 views
1

我試圖Promisify條紋模塊,但遇到問題。Promisify節點模塊上的所有子方法

如果我運行:

const stripe = Promise.promisifyAll(require('stripe')(secretKey)); 
const response = await stripe.accounts.retrieveAsync(); 

retrieveAsync不是一個函數。我必須這樣做:

const accounts = Promise.promisifyAll(stripe.accounts); 
const response = await accounts.retrieveAsync(); 

但顯然這並不能很好地擴展。我怎樣才能提出這個模塊的所有子方法?由於

+0

'accounts'沒有在您的第一個片段中定義。你是不是指'stripe.accounts'? – cartant

+0

是的,很好的眼睛,固定 – Antoine

+0

你可以創建你自己的遞歸解決方案,將開始與條紋對象,調用'Promise.promisifyAll()',然後找到任何屬性也包含普通對象,並調用'Promise.promisifyAll )'在這些子對象上遞歸地重複。對於邊緣情況,您可能必須通過保留已經遞歸的所有對象的Set對象並拒絕執行已經完成的對象來保護自己免受循環引用的影響。可能有某些屬性需要避免處理(如'.prototype')。 – jfriend00

回答

0

這似乎工作:

let stripe = require('stripe')(secretKey); 
Promise.promisifyAll(Object.getPrototypeOf(stripe)); 
0

給一個鏡頭吧:

const stripe = Promise.promisifyAll(require('stripe')(secretKey)); 
const response = yield stripe.accounts.retrieve().promise(); 
0

它看起來像條v4.25支持的承諾,如果省略回調。

隨着回調:

var stripe = require('stripe')('sk_test_XXX') 
stripe.plans.retrieve('number_one_month', (err, res) => console.log(res)) 
{ id: 'number_one_month', 
... 

而且隨着then()

stripe.plans.retrieve('number_one_month').then(console.log) 
{ id: 'number_one_month', 
... 

但我並沒有在文檔中找到它。