Ошибка: неверный вызов ловушки. при вызове ловушки после ожидания - как вы ждете, пока данные из одной ловушки будут преобразованы в другую?

Я пытаюсь вставить заголовок в свой сборщик, прежде чем использовать swr для получения данных. Мне нужно дождаться, пока пользовательский хук ответит данными, прежде чем я смогу ввести их в пользовательский сборщик.

Если я использую обещание, тогда я знаю, что получаю соответствующие данные, и если я вручную введу его, используя строку, он работает, и я вижу заголовок. Это просто асинхронно

Как мне это сделать?

Код:

    export const useApi = async (gql: string) => {
      const { acquireToken } = useAuth()
      await acquireToken().then(res => { graphQLClient.setHeader('authorization', `Bearer ${res.accessToken}`) })
      const { data, error } = useSWR(gql, (query) => graphQLClient.request(query));
      const loading = !data
      
      return { data, error, loading }

   }

1 ответ

Решение

Во-первых, выполняйте свои обещания, используйте async/await или выберите для его связывания с then, но не то и другое одновременно. если ты ждешь acquireToken()вы можете сохранить его значение в переменной. Кроме того, если вы выбрали async/await, оберните свой код блоком try/catch для правильной обработки ошибок:

    export const useApi = async (gql: string) => {
      const { acquireToken } = useAuth()

      try {
        const res = await acquireToken()
        graphQLClient.setHeader('authorization', `Bearer ${res.accessToken}`)
        const { data, error } = useSWR(gql, (query) => graphQLClient.request(query))
        const loading = !data
      
        return { data, error, loading }

      catch(error) {
        // handle error
      }
   }
Другие вопросы по тегам