2017-01-19 4 views
1

Я пытаюсь выполнить 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

Yup, хороший глаз, исправлено – Antoine

+0

Вы можете создать собственное рекурсивное решение, которое начнется с объекта stripe, вызовите '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 поддерживает Promises, если опустить обратный вызов.

С обратного вызова:

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', 
... 

Но я не нашел в документации.

 Смежные вопросы

  • Нет связанных вопросов^_^