async、await失效的原因及解决方法

572 阅读1分钟

async、await失效的原因及解决方法:

注意点1:

 要想await生效,后面的异步操作必须返回一个promise(我在这里踩了坑),否则尽管该行代码是异步,await依然不会在该处停留等待异步操作完成,可以说await是依赖promise判断该异步操作是否执行结束的。

async function comment(req, res){

  await messageModel.getMessage([page]).then(result => {

    for (let i = 0; i < result.length; i++) {

      await messageModel.getCommentLength([result[i].id]).then(resp => {

          console.log(resp

      })

    }

  })

}

注意点2:await后的Promise异步操作里如何再接一个await而不报错

在上面这个例子,在node里面运行一下就会报错提示,await只能在[async](https://so.csdn.net/so/search?q=async&spm=1001.2101.3001.7020)方法内使用。

我想了很久,将then的成功回调函数声明async函数即可,解决了我很多问题。

以下是解决代码:

async function comment(req, res){

  await messageModel.getMessage([page]).then(async result => {

    for (let i = 0; i < result.length; i++) {

      await messageModel.getCommentLength([result[i].id]).then(resp => {

          console.log(resp

      })

    }

  })

}