javascript - 从具有另一个异步函数的异步函数返回数据
问题描述
我相信这是现代 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()
. (可能我缺少一些重要的理解)
解决方案
函数 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;
});
}
在这种情况下,异步词不是必需的,因为它正在返回承诺。
推荐阅读
- jquery - rails 通过模态索引页面上的 ajax 更新模态字段
- excel - 将电子邮件内容传输到 Outlook
- r - R Data Wrangling:将数百个具有不同列标题和结构的数据帧合并到一个主表中的有效方法是什么?
- python - 如何创建一个容差,使会话中的所有低值都变为零?
- lua - 如何处理 Wireshark Lua 解析器中的位域?
- c++ - 如何在新设计中迁移需要几个额外参数的函数
- machine-learning - Tensorflow Inception 模型再训练,为什么不向 SVM 提供瓶颈?
- javascript - Dygraphs如何为一个轴实现两个标签
- python - 使用 SequenceMatcher 过滤 pandas 数据帧
- javascript - 使用变换添加类时变换不动画:通过 Jquery 进行缩放(1)