2017-03-18 108 views
0

我正嘗試更新事件發佈到PasswordUpdated頻道之前檢索到的用戶密碼。這是我到目前爲止已經試過,GraphQL訂閱:如何根據訂閱中的事件更新對象

this.apollo.subscribe({ 
    query: this.passwordUpdatedSubscription 
}).subscribe(({passwordUpdated}:any) => { 
    this.userDataQuery.updateQuery((previousResult) => { 
    previousResult.getUsers.filter(user => user.name === passwordUpdated.name).forEach(user => user.password = passwordUpdated.password); 
    }); 

}); 

不過,我只是從錯誤中發現在previousResult是不可改變的控制檯。當我嘗試更新密碼previousResult時,酒店有writable: false。我該如何解決這個問題?

回答

0

您必須返回更改的以前的結果。退房subscription docu阿波羅客戶端。稍微低一點是更新查詢的要點。

你可能想要檢查reacts immutability helper,這可以解釋一些問題。

+0

SubscribeToMore功能僅適用於apollo-react客戶端。不幸的是,它不適用於角度客戶端。我檢查了該頁面的updateQuery,看起來他們正在重新創建'newComments'數組並將新的註釋推送給它,這正是我想要避免的。我正在尋找一種方法來改變以前的結果,而不是從以前的結果重新創建一個新的結果。 –

+0

你是對的。我沒有找到SubscribeToMore。有一件事,你可以檢查是否有可能的apollo客戶端爲角落在後臺使用'dataIdFromObject' [文件](http://dev.apollodata.com/angular2/cache-updates.html#dataIdFromObject )。當你的回覆包含用戶的ID時,它應該更新apollo商店。 –