【发布时间】:2020-03-25 11:31:12
【问题描述】:
我有这两个功能
async function movieExists(movie){
return new Promise((resolve, reject) => {
const sql = '...';
con.query(sql, (err,result,fields) => {
if(err)
throw err;
else if(!result[0])
reject("Error");
else
resolve(result[0].total);
})
})
}
async function addMovie(movie){
return new Promise((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");
})
}
错误: SyntaxError: await 仅在异步函数中有效
节点版本 -> v10.16.0
**如果您对代码本身有任何建议,我很乐意听到。
【问题讨论】:
-
(resolve, reject) => {那是不是异步的函数......它是一个 Promise 构造函数这一事实也表明你犯了 Promise 构造函数反模式......你已经有一些东西返回一个承诺......你不需要构造一个承诺 -
将
new Promise行下移两行 - 问题已解决 -
什么是
con? NPM 上的大多数数据库连接库现在都提供基于 Promise 的 API。会为您省去很多麻烦,而且不会再有new Promise(... -
我实际上建议切换到具有内置承诺支持的数据库的 musql2 版本。然后,您可以对所有数据库操作使用 Promise。
标签: javascript node.js asynchronous async-await