gpt4 book ai didi

javascript - 从具有另一个异步函数的异步函数返回数据

转载 作者:行者123 更新时间:2023-12-03 22:22:41 24 4
gpt4 key购买 nike

我相信这是现代 JavaScript 中最基本/初学者的问题之一。目前有很多类似的问题,我已经解决了其中的大部分问题。但是由于我找不到准确的答案,所以我在一个新问题中发布了我的问题。
我在 Node 和 express 应用程序中使用 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() 中捕获的 promise ,因此,只需从 B() 函数返回它。
问题是,当你把 B().then()... Javascript 期望 B() 函数返回一个 promise ,实际上 B() 函数作为一个异步函数返回一个 promise ,但它没有任何 return 语句,所以它解析为未定义。

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;
});
}
在这种情况下,异步词不是必需的,因为它正在返回 promise 。

关于javascript - 从具有另一个异步函数的异步函数返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65640592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com