📅  最后修改于: 2023-12-03 14:57:35.554000             🧑  作者: Mango
在使用 JavaScript 开发 GraphQL API 时,我们可以定义订阅字段来处理实时数据推送。订阅字段的返回类型必须是 Async Iterable
,这样客户端才能通过订阅来接收实时数据更新。
当尝试定义一个订阅字段,但返回类型为未定义时,我们会收到一个错误:订阅字段必须返回 Async Iterable. 收到:未定义.
这个错误通常由于忘记或错误地定义了订阅字段的返回类型而引起。订阅字段必须返回一个表示异步可迭代对象的类型,以便客户端能够正确地接收实时数据更新。
要解决此问题,我们需要确保订阅字段的返回类型正确定义为 Async Iterable
。以下是一些解决该问题的方法:
在 GraphQL 中,我们可以使用类型系统来定义返回类型。确保订阅字段的返回类型是 Async Iterable
。
const { PubSub } = require('graphql-subscriptions');
const pubsub = new PubSub();
const typeDefs = `
type Subscription {
realTimeUpdates: String
}
`;
const resolvers = {
Subscription: {
realTimeUpdates: {
subscribe: () => pubsub.asyncIterator('REAL_TIME_UPDATES'),
resolve: (payload) => payload,
},
},
};
如果你使用的是一些流行的 GraphQL 库,如 Apollo Server,它们可能会提供一些帮助函数来定义订阅字段的返回类型。使用这些帮助函数可以避免手动定义类型,并确保返回类型为 Async Iterable
。
const { PubSub, withFilter } = require('apollo-server');
const pubsub = new PubSub();
const typeDefs = `
type Subscription {
realTimeUpdates: String
}
`;
const resolvers = {
Subscription: {
realTimeUpdates: {
subscribe: () => pubsub.asyncIterator('REAL_TIME_UPDATES'),
resolve: (payload) => payload,
},
},
};
一旦你正确定义了订阅字段的返回类型,客户端就可以通过订阅来接收实时数据更新。
subscription {
realTimeUpdates
}
在 JavaScript 中使用 GraphQL 开发实时数据推送功能时,我们必须确保订阅字段的返回类型是 Async Iterable
。这个问题通常是由于返回类型未定义而引起的错误。通过正确定义返回类型,并使用相应的订阅方法,我们可以实现实时数据的订阅与推送。