为什么我可以有异步代码,例如通过回调获取数据库连接,这工作得很好,但我不能在 Promises 中等待相同的代码。
例如
return new Promise((resolve, reject) => {
mySql.getConnection((error, connection) => {
/* code goes here */
})
}
上面的代码就像一个魅力。但如果我尝试做类似的事情:
return new Promise(async (resolve, reject) => {
try {
const connection = await mySql.getConnection();
} catch (error) {
throw error;
}
}
上面的代码被认为是反模式,因为
async (resolve, reject)
将返回新的 Promise,而我最终会在 Promise 中得到 Promise。
我尝试调用自调用函数并用异步装饰它,但这不起作用,因为我没有等待该函数。 来源:https://simonjcarr.medium.com/using-async-inside-a-javascript-promise-f32957617d78
resolve
和 reject
回调作为参数提供是有原因的,请使用它们:
return new Promise(async (resolve, reject) => {
try {
const connection = await mySql.getConnection();
resolve(connection);
} catch (error) {
reject(error);
}
}