Обещания JS: Связь между синтаксисом .then и async / await (пример клиента Apollo) - PullRequest
1 голос
/ 20 мая 2019

Извините за неправильный формат вопроса, но я просто не знаю, что здесь не так: я подключаю токен JWT к клиенту Apollo (используя apollo-boost), например:

const client = new ApolloClient({
  uri: 'http://127.0.0.1:3000/graphql',
  // adding the auth header to all requests
  request: async operation => {
    try {
      const session = await Auth.currentSession()
      const token = session.accessToken.jwtToken
      operation.setContext({
        headers: {
          authorization: `Bearer ${token}`
        }
      })
    } catch(e) {
      return
    }
  }
})

Это работает. Однако когда я попытался преобразовать это в синтаксис .then, который мне больше нравится, он больше не работал. Вот как я переписал это:

  request: operation => {
    Auth.currentSession().then(session => {
      const token = session.accessToken.jwtToken
      operation.setContext({
        headers: {
          authorization: `Bearer ${token}`
        }
      })
    }).catch(err => {
      return
    })
  }

Чего мне не хватает?

1 Ответ

1 голос
/ 20 мая 2019

Превосходный синтаксис async / await, попробуйте использовать его. Если вам нужно настроить таргетинг на старые браузеры, я бы предложил ввести транспортер в конвейер компиляции, а не переписывать его в vanilla javascript вручную. Если вас по-прежнему интересует синтаксис «then», то вы здесь: обещание должно быть возвращено функцией.

request: operation => {
    return Auth.currentSession().then(session => {
       ... 
    }).catch(err => {
      return
    })
}
...