从具有另一个异步函数的异步函数返回数据
Posted
技术标签:
【中文标题】从具有另一个异步函数的异步函数返回数据【英文标题】:Returning data from an async function having another async function 【发布时间】:2021-04-14 20:17:07 【问题描述】:我相信这是现代 javascript 中最基本/初学者的问题之一。有很多类似的问题存在,我已经解决了大部分问题。但由于我找不到准确的答案,我将我的问题发布在一个新问题中。
我在节点和快递应用程序中使用sequelize
。现在,像findOne
这样的所有查询函数本质上都是async
。我有两个功能,
function A()
B()
.then((result:any) =>
if(result)
// Do something
);
async function B()
sequelizeModel.findOne(where: <col>:<val>)
.then((result:any) =>
if(result === null)
return true;
else
return false;
)
.catch((error: any) =>
console.error(error);
return false;
);
B()
检查数据库以查看是否存在特定数据行。因此,它将返回true
/false
。基于 A()
执行某些活动。
现在,B()
总是得到result = undefined
。
一个解决方案是,
function A()
B()
.then((result:any) =>
if(result === null)
// Do something
)
.catch((error:any) =>
console.error(error);
);
async function B()
return await sequelizeModel.findOne(where: <col>:<val>);
但是有什么办法让我不想将空检查逻辑放在A()
中并在B()
中执行它。 (可能我缺少一些重要的理解)
【问题讨论】:
【参考方案1】:函数 B() 必须返回您试图在函数 A() 中捕获的承诺,因此,只需从 B() 函数中返回它。
问题是当你把 B().then()... Javascript 期望 B() 函数返回一个 Promise,实际上 B() 函数作为一个异步函数返回一个 Promise,但它没有任何返回语句,因此它解析为未定义。
function A()
B() // Handling the promise returned by B()
.then((result:any) =>
if(result)
// Do something
);
function B()
return sequelizeModel.findOne(where: <col>:<val>) //Returns the promise that A() function will handle.
.then((result:any) =>
if(result === null)
return true;
else
return false;
)
.catch((error: any) =>
console.error(error);
return false;
);
在这种情况下,异步词不是必需的,因为它正在返回承诺。
【讨论】:
以上是关于从具有另一个异步函数的异步函数返回数据的主要内容,如果未能解决你的问题,请参考以下文章