在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]
Posted
技术标签:
【中文标题】在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]【英文标题】:Inside async function, returning value from a callback function returns Promise(undefined) [duplicate] 【发布时间】:2018-07-09 12:13:55 【问题描述】:我是异步编程的新手, 我面临与question 类似的问题,在这个问题中建议的方法使用回调,但我正在尝试使用 Promises 和 async-await 函数来做到这一点。我在控制台中未定义。这是我的例子。我错过了什么?
//Defining the function
async query( sql, args )
const rows = this.connection.query( sql, args, async( err, rows ) =>
if ( err )
throw new Error(err);
return rows;
);
//calling the function here
db.query("select 1")
.then((row) => console.log("Rows",row)) // Rows undefined
.catch((e) => console.log(e));
【问题讨论】:
你缺少的是await
。
您不要将async
放在回调函数上。您使用 Promise 构造函数,然后在调用函数时使用 await
而不是 then
。
【参考方案1】:
让您的 query
函数返回 Promise
function query(sql, args)
return new Promise(function (resolve , reject)
this.connection.query(sql, args, (err, rows) =>
if (err)
reject(err);
else
resolve(rows)
);
);
//calling the function here
query("select 1")
.then((row) => console.log("Rows",row)) // Rows undefined
.catch((e) => console.log(e));
【讨论】:
这行得通,但我们不能在查询函数中使用 async 和 await 吗? 如果你真的想在外部查询函数中使用 async/await,你可以“await new Promise(...)”。无论如何,你仍然需要一个 Promise 来转换回调,无论你是使用 async/await 还是只是简单的 Promises。以上是关于在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]的主要内容,如果未能解决你的问题,请参考以下文章