我有一个 graphql 服务器,我试图在实体状态更新时触发一个事件。我有一个用于更新实体的突变,它使用 graphql-subscriptions
发布更新以供订阅者收听。但是,pubsub.subscribe(EVENT_NAME)
接受了更改,但是当我将其集成到订阅解析器中时,它不会触发更新。
为简洁起见,我已经编辑了与问题无关的部分代码。
我的解析器:
Mutation: {
updateStatus(_, { id, status, hash }) {
return repository.updateStatus(id, status, hash);
}
},
Subscription: {
updatedStatus: {
subscribe: () => pubsub.asyncIterator('updatedStatus'),
}
},
我的仓库:
export const updateStatus = async function(id: String, status: String, hash: String) {
try {
const res = await fetch(`${baseURL}/article/${id}/status?publish_hash=${hash}`, {
headers,
method: 'PATCH',
body: JSON.stringify({ status })
});
const article = await fetchSingleArticle(id, 'XML', headers.channel, false);
await pubsub.publish('updatedStatus', article);
return article;
} catch (e) {
console.log(e.message);
}
}
我的模式:
type Mutation {
updateStatus(id: ID!, status: PublishingStatus = PUBLISHING, hash: String): Article
}
type Subscription {
updatedStatus(id: ID!): Article
}
schema {
query: Query
mutation: Mutation
subscription: Subscription
}
为了对此进行测试,我只使用了 graphiql,它可以很好地获取 websocket 连接。
我尝试使用 article
(如图所示)和 {updatedStatus: article}
进行发布,但似乎都没有成功。
如前所述,pubsub.subscribe('updatedStatus')
确实接收到更改。所以这个问题似乎与订阅解析器有关。
我将关闭以下文档:http://dev.apollodata.com/tools/graphql-subscriptions/setup.html#setup
最佳答案
原来我使用的是过时的 graphql 包!更新到最新版本解决了这个问题。
关于javascript - Apollo 订阅无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44970081/