[英]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/await
和Promise
鏈使用其中之一。
使用 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.