Javascript Node.js异步函数未被识别为有效的异步函数

Javascript Node.js异步函数未被识别为有效的异步函数,javascript,node.js,asynchronous,async-await,Javascript,Node.js,Asynchronous,Async Await,我有这两个函数 异步函数movieExists(movie){ 返回新承诺((解决、拒绝)=>{ 常量sql=“…”; con.query(sql,(错误、结果、字段)=>{ 如果(错误) 犯错误; 如果(!结果[0]) 拒绝(“错误”); 其他的 解析(结果[0]。总计); }) }) } 异步函数addMovie(电影){ 返回新承诺((解决、拒绝)=>{ 常量sql=“…”; const exists=wait movieExists(movie);//此行出错 如果(存在==0){ c

我有这两个函数

异步函数movieExists(movie){
返回新承诺((解决、拒绝)=>{
常量sql=“…”;
con.query(sql,(错误、结果、字段)=>{
如果(错误)
犯错误;
如果(!结果[0])
拒绝(“错误”);
其他的
解析(结果[0]。总计);
})
})
}
异步函数addMovie(电影){ 返回新承诺((解决、拒绝)=>{ 常量sql=“…”; const exists=wait movieExists(movie);//此行出错 如果(存在==0){ con.query(sql,(错误、结果、字段)=>{ 如果(错误) 拒绝(“错误”); 其他的 决心(“成功”); }) }否则 解决(“电影已存在”); }) } 错误: SyntaxError:await仅在异步函数中有效

节点版本->v10.16.0


**如果您对代码本身有任何建议,我很乐意听到。

wait关键字直接位于传递给
new Promise()
的函数内部,该函数不是异步的

尝试将其移出该函数,如下所示:

async function addMovie(movie){
  const exists = await movieExists(movie);
  return new Promise((resolve, reject) => {
    const sql = '...';
    // ...
  })
}

第二个条件是错误的,因为在承诺匿名函数不是异步函数的情况下,您可以使用以下函数,但这不是控制异步序列的好方法

async function addMovie(movie){
        return new Promise(async (resolve, reject) => {
            const sql = '...';
            const exists = await movieExists(movie); //Error on this line

            if(exists == 0){
                con.query(sql, (err,result,fields) => {
                    if(err)
                        reject("Error");
                    else   
                        resolve("Success");
                })
            }else
                resolve("Movie already exists");
        })
}

(解析、拒绝)=>{
这是一个不异步的函数…它是承诺构造函数的事实也表明你犯了承诺构造函数反模式的错误…你已经有了返回承诺的东西…你不需要构建承诺将
新承诺
行向下移动两行-问题解决了什么是
con
?NPM上的大多数DB连接库现在都提供了基于promise的API。这将为您省去很多麻烦,并且不再有新的promise(…实际上,我建议您切换到具有内置promise支持的数据库的musql2版本。然后,您可以对所有数据库操作使用promise。在promise反模式上,其他人正在谈论您可能希望查看的内容(添加到node 8.0.0中)