2017-07-07 86 views
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

回答

0

原來我使用過時的graphql包!更新到最新版本解決了這個問題。