在Apollo GraphQL Server中,当我们使用subscription进行长连接的实时通信时, 客户端会收到来自服务器的初始响应(initial response),而这可能会导致一些问题。
所以我们需要对其进行改写,例如:
对于下面的代码:
subscription testSubscription {
test
}
我们可以使用RxJS的操作符skip(1)来忽略第一个初始响应,然后再进行我们需要的操作。
import { skip } from 'rxjs/operators';
const subscription = gql`
subscription testSubscription {
test
}
`;
const client = new ApolloClient({
link: new WebSocketLink({
uri: 'ws://localhost:4000/graphql',
options: {
reconnect: true
}
}),
cache: new InMemoryCache()
});
const observer = {
next: data => console.log(data)
};
client.subscribe({
query: subscription
}).pipe(skip(1)).subscribe(observer);