我有一个特殊的用例,我想使用 GraphQL 作为现有 WebSocket 服务器的代理。但不知何故,我根本没有让订阅工作。
因为我不能使用 NestJS 附带的 PubSub 东西,所以我得出的结论是,使用 Ix 创建 AsyncIterator 是最简单的。为了证明它完全有效的概念,我将我的代码简化为:
@Resolver((of) => –)
export class TestResolver {
constructor() {}
@Subscription((returns) => Number)
counter(): AsyncIterator<number> {
return from([1, 2, 3, 4, 5, 6])[Symbol.asyncIterator]();
}
}
至少应该返回 6 或其他东西。但我的客户抱怨“不能为不可为空的字段 Subscription.counter 返回 null。”
我现在知道这段代码可能有什么问题以及为什么它可能返回 null。
––––</p>
我还尝试使用没有 Ix 的 AsyncIterator,它可能会产生更好的输出,但实际上也会失败并出现相同的错误。
async function* generateSequence(start, end) {
for (let i = start; i <= end; i++) {
// Wow, can use await!
await new Promise((resolve) => setTimeout(resolve, 1000));
yield i;
}
}
@Resolver((of) => –)
export class TestResolver {
constructor() {}
@Subscription((returns) => Number)
counter(): AsyncIterator<number> {
return generateSequence(1, 100);
}
}