簡體   English   中英

NodeJs:Promise 總是返回未定義

[英]NodeJs: Promise always returns undefined

所以我的 sqlite 數據庫中有以下 promise 應該是 go 並告訴我是否匹配。 即使變量是正確的,它也總是返回未定義的。

var checkLoanable = function(bookID){
    return new Promise((resolve, reject)=>{
        
        db.run('SELECT * FROM book WHERE id=?',[bookID],(err,row)=>{
            if (err) {
                console.log("error")
                reject();
                }
            if(row){
                
                if(row.loanable==0){
                    console.log("not loanable")
                    reject();
                        
                }
                console.log("success")
                resolve(row);
            }else{
                console.log("undefined")
                reject();
                    
            }
            console.log("End of promise")
        });
    
    })
}

這是function的電話

await checkLoanable(bookID)
        .then(()=>{console.log("success")})
        .catch(()=>{
            res.status(422)
                .setHeader('content-type', 'application/json')
                .send({ message: "Failed to add loan: book is not loanable!"});
            
        });
        console.log("after promise");
        

await 在異步 function 中,經過測試我確實等待 promise 結束然后繼續代碼。 我不明白為什么它總是未定義。 預先感謝您的任何幫助。

run()用於插入和更新行。

要獲取單行,請使用db.get()

db.get('SELECT * FROM book WHERE id=?', [bookID] , (err,row) => { });

至少如果你使用的是npm/sqlite package。

不要混合async/awaitPromise鏈使用其中之一。

使用 try...catch 或Promise..then..catch

try {
  const book = await checkLoanable(bookID);
  res.json(book);
}catch ({message}) {
  res.status(422).send(message);
}

// or
checkLoanable(bookID)
  .then((book) => {res.json(book);})
  .catch(({message}) => {
    res.status(422).json({ 
      message: "Failed to add loan: book is not loanable!"
    });
  });

例如,如果您使用這樣的東西

const myPromise = () => new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Success!');
  }, 1000);
});

(async () => {
  const result = await myPromise().then(data => {
    console.log({data});
  });
  console.log({result});
})();

結果是

{data: 'Success!'}
{result: undefined}

並非兩者都同時獲得價值。

暫無
暫無

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

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