2
我有一個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