获取 Stripe 调用以在 GraphQL 模式中解析
Getting Stripe call to resolve in GraphQL schema
我正在尝试使用 GraphQL 和 stripe 创建一个 API 端点,但是我无法通过 Stripe 的异步调用正确解析数据,而是 returns 未定义。
调用如下:
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
将立即 return undefined
并在操作完成时调用回调。
您可以继续使用回调并将其包装在 Promise 中,但没有必要这样做,因为 stripe 的库支持 Promise。只是不要传入回调,而不是 undefined
,charges.list
将 return 最终解析为费用列表的 Promise。
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")
}
您的解析器可以 return 一个值或一个将解析为该值的 Promise,因此我们可以 return return 由 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
}
此外,根据文档,收费已经 return 按创建日期排序:
The charges are returned in sorted order, with the most recent charges appearing first.
我正在尝试使用 GraphQL 和 stripe 创建一个 API 端点,但是我无法通过 Stripe 的异步调用正确解析数据,而是 returns 未定义。
调用如下:
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
将立即 return undefined
并在操作完成时调用回调。
您可以继续使用回调并将其包装在 Promise 中,但没有必要这样做,因为 stripe 的库支持 Promise。只是不要传入回调,而不是 undefined
,charges.list
将 return 最终解析为费用列表的 Promise。
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")
}
您的解析器可以 return 一个值或一个将解析为该值的 Promise,因此我们可以 return return 由 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
}
此外,根据文档,收费已经 return 按创建日期排序:
The charges are returned in sorted order, with the most recent charges appearing first.