JS Promises:.then语法与async / await之间的关系(Apollo客户端示例)

时间:2019-05-19 21:21:48

标签: javascript async-await es6-promise apollo

抱歉,问题格式很糟糕,但我不知道这里出了什么问题:我正在将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 个答案:

答案 0 :(得分:1)

async / await语法更好,请尝试继续使用它。如果您必须针对较旧的浏览器,建议您在您的编译管道中引入一个转译器,而不要手动将其改写为普通javascript。如果您仍然对“ then”语法感兴趣,那么您就可以:函数需要返回promise。

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