当我使用简单的代码时,这发生在我的 Nestjs 应用程序中:
import { PubSub } from 'graphql-subscriptions';
export const pubSub = new PubSub();
@Subscription(() => ChatModel, {
name: 'chatSent',
filter: function (this: ChatResolver, payload, variables, context) {
return this.chatService.filterChatSentEvent(payload, user);
},
})
chatSent() {
return pubSub.asyncIterator('chatSent');
}
我使用的软件包:
"graphql": "^16.10.0",
"graphql-subscriptions": "^3.0.0",
似乎新版本的graphql-subscription使用了asyncIterableIterator,所以正确的用法是:
return pubSub.asyncIterableIterator('chatSent');
通过检查类型定义可以注意到这一点:
PubSub extends PubSubEngine
PubSubEngine 类实现:
asyncIterableIterator<T>(triggers: string | readonly string[]): PubSubAsyncIterableIterator<T>;
在 npm 包“graphql-subscriptions”中,同时使用了 asyncIterator 和 asyncIterableIterator(描述可能未更新)。