Сценарий
Когда пользователь аутентифицирован (isAuthenticated
логическая ссылка):
- Проверьте, есть ли у пользователя предпочтения, обратившись к бэкенду graphql (
useViewerQuery
) - Если для пользователя нет предпочтений, установите значение по умолчанию (
useSetPreferenceDefaultMutation
)
Проблема
И запрос, и мутация корректно работают на игровой площадке graphql и в приложении Vue. Они были сгенерированы с помощью генератора кода graphql, который использует useQuery и useMutation в фоновом режиме.
Проблема в том, что мы не можем определить правильный порядок. Иногда useSetPreferenceDefaultMutation
выполняется раньше useViewerQuery
. Это сбрасывает настройки пользователя на значения по умолчанию, и это не является желаемым поведением.
Кроме того, при обновлении страницы все работает правильно. Однако при закрытии повторного открытия страницы он всегда вызывает useSetPreferenceDefaultMutation
.
Код
export default defineComponent({
setup() {
const {
result: queryResult,
loading: queryLoading,
error: queryError,
} = useViewerQuery(() => ({
enabled: isAuthenticated.value,
}))
const {
mutate: setDefaultPreferences,
loading: mutationLoading,
error: mutationError,
called: mutationCalled,
} = useSetPreferenceDefaultMutation({
variables: {
language: 'en-us',
darkMode: false,
},
})
onMounted(() => {
watchEffect(() => {
if (
isAuthenticated.value &&
!queryLoading.value &&
!queryResult.value?.viewer?.preference &&
!mutationCalled.value
) {
void setDefaultPreferences()
}
})
})
return {
isAuthenticated,
loading: queryLoading || mutationLoading,
error: queryError || mutationError,
}
},
})
Неудачные попытки
skip
такой же, какenabled
во Vue. Запрос выполняется правильно после того, какisAuthenticated
установлено вtrue
, так что это не проблема. Проблема в том, что мутация иногда выполняется первой. - person DarkLite1   schedule 02.10.2020if
верны. В мутации нет опцииenabled
, она вызывается только в предложенииwatchEffect
сsetDefaultPreferences()
- person DarkLite1   schedule 02.10.2020onCompleted
? - person xadm   schedule 02.10.2020