Javascript 如何将函数与等待分离

Javascript 如何将函数与等待分离,javascript,node.js,adonis.js,Javascript,Node.js,Adonis.js,我只是从php切换到全职js。我试图清理javascript函数中的代码,但仍然混淆了如何处理它 for(let i in allEmpData) { let emp = allEmpData[i] if(empData == null) { const addEmp = new Employee() this.addEmpFn(addEmp, emp) } if(empData != null) { this.addEmpFn

我只是从php切换到全职js。我试图清理javascript函数中的代码,但仍然混淆了如何处理它

for(let i in allEmpData) {
    let emp = allEmpData[i]
    if(empData == null) {
      const addEmp = new Employee()
      this.addEmpFn(addEmp, emp)
    }
    if(empData != null) {
      this.addEmpFn(empData, emp)
    }
 }
我之所以调用函数addEmpFn,是因为我将创建/更新代码放在了函数addEmpFn中

 addEmpFn(empData, emp) {
    empData.name = emp.name
    return await empData.save()
  }
错误是这样的:

等待意外的令牌返回

我想做类似的事情,但在干净的代码中,使用单独的函数

 for(let i in allEmpData) {
    const empData =  await Employee.query()
                                  .where('id',1)
                                  .first();
    let emp = allEmpData[i]
    if(empData == null) {
      const addEmp = new Employee()
      addEmp.name = emp.name
      return await empData.save()
    }
    if(empData != null) {
      empData.name = emp.name
      return await empData.save()
    }
 }

您需要将函数分配为异步,如下所示:

async addEmpFn(empData, emp) {
    empData.name = emp.name
    return await empData.save()
}

await关键字仅在异步函数中有效。因此,在函数声明之前,必须先编写async关键字

像这样,

async addEmpFn(empData, emp) {
  empData.name = emp.name
  return await empData.save()
}
试着在你的功能之前提到async,就像下面我提到的那样

async addEmpFn(empData, emp) { 
    empData.name = emp.name;
    return await empData.save();
}

在这里,您实际上不需要异步等待,当您希望等待承诺得到解决时,需要异步等待

在JS中,return-await也是一种反模式,直到您不想使用try-catch-around

下面的代码是要做的,工作原理与公认的答案相同

addEmpFnempData,emp{ empData.name=emp.name 返回empData.save
}谢谢,这是工作,但太多人给了我答案。我得庆祝1号。我非常感谢你的帮助。。你们提出的问题很重要…谢谢你们,这是工作,但太多人给我答案了。我得庆祝1号。非常感谢您的帮助为什么需要异步等待?谢谢,我只是想写同样的东西。