javascript - 获取 Stripe 调用以在 GraphQL 架构中解析

标签 javascript graphql stripe-payments graphql-js

我正在尝试使用 GraphQL 和 stripe 创建 API 端点,但是我无法使用 Stripe 的异步调用正确解析数据,而是返回未定义。

这里是调用:

app.use('/', graphqlHTTP(req => {
const charges = limit => stripe.charges.list({ limit: limit }, (err, charges) => {
    charges = _.orderBy(charges, "created", "desc")
    return charges
})
return {
    schema,
    context: {
        charges
    },
    graphiql: true
}
}))

这是架构:

module.exports = new GraphQLSchema({
query: new GraphQLObjectType({
    name: 'StripeCharges',
    description: 'These are Stripe charges made to store',
    fields: () => ({
        stripeCharge: {
            type: GraphQLList(StripeChargeType),
            args: {
                limit: { type: GraphQLInt }
            },
            resolve: (root, args, context, info) => {
                console.log(context.charges(args.limit))
                return context.charges(args.limit)
            }
        }
    })
 })
})

最佳答案

按照惯例,在回调中返回值不会执行任何操作。当您包含回调时,charges.list 将立即返回 undefined 并在操作完成时调用回调。

可以继续使用回调并将其包装在 Promise 中,但没有必要这样做,因为 stripe 的库支持 Promise。只是不要传入回调,charges.list 将返回一个最终解析为费用列表的 Promise,而不是 undefined

function getCharges (limit) {
  return stripe.charges.list({ limit: limit }) // returns a promise
    .then(charges => {
      return _.orderBy(charges, "created", "desc")
    })
}

// with async/await, async functions always return a Promise
async function getCharges (limit) {
  const charges = await stripe.charges.list({ limit: limit })
  return _.orderBy(charges, "created", "desc")
}

您的解析器可以返回一个值或一个将解析为该值的 Promise,因此我们可以只返回 getCharges 返回的值:

resolve: (root, args, context, info) => getCharges(args.limit)

或者如果您想操纵解析器内的电荷

resolve: async (root, args, context, info) => {
  let charges = await getCharges(args.limit)
  // do whatever
  return charges
}

此外,无论其值(value)如何,根据文档,费用已按创建日期排序返回:

The charges are returned in sorted order, with the most recent charges appearing first.

关于javascript - 获取 Stripe 调用以在 GraphQL 架构中解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53109913/

相关文章:

javascript - $(window.document).ready(function () { ... } 还没准备好?

javascript - 在页面中使用两个框架实现平滑滚动

c# - GraphQL 我将如何编写查询以按名字查找

java - 为什么我的 Spring Controller 不处理 GraphiQL 发送的 OPTIONS 请求?

java - 如何让 Stripe Checkout 在 Android WebView 中继续进行?

subscription - 使用 Stripe 订阅跳过付款的最佳方式(提供免费一个月)?

node.js - 如何在 stripe-node 中使用多个 Stripe key ?

javascript - 使用不可变数据结构时 Jest 模拟函数参数不匹配

javascript - AND 运算符和 OR javascript 的混合使用

python - 在运行时 Graphite 烯上创建动态模式