开发者问题收集

vue:语法错误:await 是保留字

2018-06-19
20983
async checkDriver(mobile) {
    this.$axios({
      url: "xxx",
      method: "POST",
      data: {
        mobile: mobile
      }
    }).then(res => {
      console.log("========="+res.status);
      return res.data.status;
    }).catch(error => {
      this.$message.error(error.toString());
      return -1;
    });
  },
  addValidate() {
    this.$refs['form'].validate((valid) => {
      if (valid) {
        let status = await this.checkDriver(this.form.mobile);
        console.log(status);

      } else {
        return false;
      }
    });

未解析的变量或类型 await。突出显示可能旨在异步但缺少 async 修饰符的函数。如何在 => 中使用 await?给我一些帮助。谢谢

3个回答

在函数体中使用 await 的函数必须使用 async 关键字。

因此,将 asynccheckDriver 移至 addValidate

checkDriver(mobile) {
    // ...
}
async addValidate() {
    // ...
    let status = await this.checkDriver(this.form.mobile);
}

此外, checkDriver 方法应返回一个承诺。因此,将 checkDriver 的内容更改为:

checkDriver(mobile) {
    return this.$axios({
        url: "xxx",
        method: "POST",
        data: {
            mobile: mobile
        }
    })
}

并且从 Promise(在本例中为 axios)返回的数据将分配给 addValidate 中的 status

然后,如果您想处理错误,则应将 await 调用包装在 try/catch 块中。

skovmand
2018-06-19
addValidate() {
    this.$refs['form'].validate( async (valid) => {
      if (valid) {
        let status = await this.checkDriver(this.form.mobile);
        console.log(status);

      } else {
        return false;
      }
    });

您可以在参数旁边添加缺少的 async 关键字

Isaac
2018-06-19

您必须将 addValidate() 设为异步,例如 async addValidate() { /* ... */ } 。您只能 在标记为 async 的函数中使用 await

vkarpov15
2018-06-19