Promisifying Stripe API - PullRequest
       4

Promisifying Stripe API

0 голосов
/ 06 февраля 2020

Я пытаюсь util.promisify следующий вызов чередования, который завершается успешно:

stripe.customers.create(
  {
    description: 'My First Test Customer (created for API docs)',
  },
  function(err, customer) {
      console.log(customer)
  }
)

IIU C это должно работать:

const util = require('util')

const createCustomerPromise = util.promisify(stripe.customers.create)

createCustomerPromise(
{
    description: 'My First Test Customer (created for API docs)'
}
).then(customer=>console.log(customer))

Однако, когда я запускаю выше я получаю:

(node:28136) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'createResourcePathWithSymbols' of undefined
    at /home/ole/Temp/stripetest/node_modules/stripe/lib/StripeMethod.js:27:12
    at internal/util.js:286:30


Ответы [ 2 ]

3 голосов
/ 06 февраля 2020

SDK от Stripe's Node, stripe-node, уже возвращает обещания, поэтому вам не нужно обещать его .

Из документы :

Каждый метод возвращает цепное обещание, которое можно использовать вместо обычного обратного вызова:

Просто пропустите обратный вызов с ошибкой :

stripe.customers.create({
  description: 'My First Test Customer (created for API docs)'
})
.then(result => console.log(result))

или с использованием async/await:

const result = await stripe.customers.create({
  description: 'My First Test Customer (created for API docs)'
})
console.log(result)
2 голосов
/ 06 февраля 2020

create, кажется, хочет, чтобы this было stripe.customers при вызове, поэтому вам нужно bind это:

const createCustomerPromise = util.promisify(stripe.customers.create.bind(stripe.customers))
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^^^^

Если это произойдет много, вы можете дайте себе полезную функцию:

function promisifyMethod(obj, name) {
    return util.promisify(obj[name].bind(obj));
}

Затем

const createCustomerPromise = promisifyMethod(stripe.customers, "create");

Но обратите внимание, что Ник Кириакидес говорит, что Stripe API уже поддерживает обещания .

...