Я только начал работать с Apollo над своим побочным проектом (веб-игрой) и застрял на некоторых подписках, которые использую.
В некоторых представлениях подписка не запускается напрямую, но она работает должным образом, если я обновляю страницу.
// StartGame.vue
<script>
import store from "../store/index";
export default {
data() {
return {
players: [],
game: null
};
},
methods: {
async onStartGame() {
const response = await this.$store.dispatch("updateGame", {
started: true
});
if (!response) {
alert("Something went wrong. Try again");
return;
}
this.$router.push({ name: "GameProgress" });
},
onGoToGame() {
this.$router.push({ name: "GameProgress" });
}
},
mounted() {
this.game = this.$store.getters.getGame;
},
created() {
this.$apollo.subscriptions.gameAndPlayers.refresh();
},
apollo: {
$subscribe: {
gameAndPlayers: {
query: require("../graphql/subscriptions/subscribeGameAndPlayers.gql"),
variables: {
game_id: store.getters.getGame.id
},
result(data) {
console.log("subscribeGameAndPlayers", data);
const game = data.data.game;
this.game = { ...this.game, started: game.started };
this.players = game.players;
}
}
}
}
};
</script>
Может ли кто-нибудь увидеть что-то очевидное неправильное в этом фрагменте кода? Как я уже писал, если я обновлю эту страницу, подписка начнет работать (игроки присоединяются к игре из других браузеров). Думаю, монтировать и создавать не нужно, если я могу заставить работать часть Apollo, верно?
Я подумал, что это, вероятно, какой-то кеш, так как Apollo, похоже, много его использует, а я еще не очень разбираюсь в этом.
Пытался добавить fetchPolicy: 'no-cache' безуспешно
// apollo.js (included in main.js)
export default new ApolloClient({
link: link
cache: new InMemoryCache(),
defaultOptions: {
fetchPolicy: "no-cache"
}
});
Еще несколько представлений имеют такое же поведение, поэтому я полагаю, что мне не хватает чего-то фундаментального ...