为什么回调在 Promise 中有效,而 wait 却不行?

问题描述 投票:0回答:1

为什么我可以有异步代码,例如通过回调获取数据库连接,这工作得很好,但我不能在 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

javascript asynchronous async-await promise
1个回答
0
投票

resolve
reject
回调作为参数提供是有原因的,请使用它们:

return new Promise(async (resolve, reject) => {
     try {
         const connection = await mySql.getConnection();
         resolve(connection);
     } catch (error) {
         reject(error);
     }
}
© www.soinside.com 2019 - 2024. All rights reserved.