【问题标题】:Chained await within a single async function在单个异步函数中链接等待
【发布时间】:2021-01-24 02:42:12
【问题描述】:
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/&lt;PATH&gt;', { token })

我的 IDE 状态

TS1308:“await”表达式仅允许在异步函数中和模块的顶层使用。

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

【问题讨论】:

  • then() 的函数回调不是异步的
  • 不要将awaitthen 语法混用。请改写const res = await axios.post('/api/&lt;PATH&gt;', …);

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


【解决方案1】:

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;

【讨论】:

  • 为什么 Op 首先需要 then()?
  • @charlietfl 我试图从语法上解释async 的工作原理。对于逻辑,我在之后添加了信息
  • @hackape 在添加第二段之前投下了反对票。
  • 好吧,即使没有第二段,它也解释了为什么 OP 的案例没有编译,这正是他所问的!去掉不必要的 then 回调是不错的添加,但没有这部分,答案仍然是合法的。
  • 感谢您的快速回复,这是我的错误组合 await & .then
猜你喜欢
  • 2020-01-05
  • 2019-11-17
  • 2020-10-07
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
相关资源
最近更新 更多