在单个异步函数中链接等待

时间:2020-10-09 01:51:43

标签: javascript asynchronous async-await axios next.js

async function submitForm(e){
  e.preventDefault()
  console.log(e.target)

  await axios.post('/api/<PATH>', {username, password})
    .then(res => {
      console.log(res.data)
      const token = res.data.token
      if (token){
        const json = jwt.decode(token) as { [key: string]: string}
  
        await axios.post('/api/<PATH>', { token })
          .then(res => {
            const data = res.data

问题出在这行

await axios.post('/api/<PATH>', { token })

我的IDE状态

TS1308:“等待”表达式仅在异步函数中以及模块的顶层使用。

当前无法编译,我正在尝试将令牌值传递给另一个axios API调用。但是,由于上述错误,目前这是不可能的。关于如何解决此问题的任何线索将不胜感激

1 个答案:

答案 0 :(得分:2)

await必须直接在async函数中,您还需要使回调函数async

async function submitForm(e){
  e.preventDefault()
  console.log(e.target)

  await axios.post('/api/<PATH>', {username, password})
    // async here
    .then(async res => {
      console.log(res.data)
      const token = res.data.token
      if (token){
        const json = jwt.decode(token) as { [key: string]: string}
  
        await axios.post('/api/<PATH>', { token })
          .then(res => {
            const data = res.data

正如Bergi所提到的,混合使用await.then是没有意义的,您的代码可能像这样:

async function submitForm(e){
  e.preventDefault()
  console.log(e.target)

  let res = await axios.post('/api/<PATH>', {username, password})
  console.log(res.data)
  const token = res.data.token
  if (token){
    const json = jwt.decode(token) as { [key: string]: string}
  
    res = await axios.post('/api/<PATH>', { token })
    const data = res.data;