簡體   English   中英

從具有另一個異步 function 的異步 function 返回數據

[英]Returning data from an async function having another async function

我相信這是現代 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>}});
}

但是有什么辦法讓我不想將 null 檢查邏輯放在A()中並在B()中執行。 (可能我缺少一些重要的理解)

The function B() has to return the promise that you try to catch in the function A(), so, just return it from B() function.

The problem is that when you put B().then()... Javascript expects that B() function returns a promise, in fact B() function as an async function returns a promise, but it does not have any return statement ,所以它解析為未定義。

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM