我有一個帶有多個 mysql 查詢的異步函式,如下所示:
const memberdata = async function() {
somequery1 = await doquery('id','table1','member_id',userid);
somequery2 = await doquery('id','table2','member_id',userid);
somequery3 = await doquery('id','table3','member_id',userid);
problem = await doquery('id','sessions','member_id',userid);
const array = {somequery1 : somequery1[0].id, somequery2 : somequery2[0].id, somequery3 : somequery3[0].id, problem : problem[0].id};
return (array);
};
memberdata().then(v => {
username = v.somequery1;
sex = v.somequery2;
age = v.somequery3;
session = v.problem
});
大多數查詢都會回傳一個值,因為它們的表上總是至少有一條記錄。唯一的例外是problem在 50% 的情況下不會找到任何記錄,因此在宣告時session我會收到一個錯誤說UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
如果那是唯一的查詢,那不會是一個問題,但事實并非如此problem,如果沒有找到記錄,我該怎么做才能簡單地回傳 0 或 null?
謝謝你。
uj5u.com熱心網友回復:
我認為你只需要學習 if 陳述句是如何作業的。
我的猜測是doQuery回傳 0 條或更多條記錄,如果它是 0,你的代碼就會行為不端,因為你指的是:
problem[0].id
如果陣列有 0 個元素,則會觸發您的錯誤。
所以解決方案是添加一個處理這種情況的 if 陳述句:
if (problem.length === 0) {
// Do something
} else {
// Do the normal thing
}
uj5u.com熱心網友回復:
如果doquery總是回傳決議為陣列的 Promise,則需要在訪問[0]第 th 元素的屬性之前檢查該陣列是否已填充。
回傳時,更改
problem : problem[0].id};
到
problem : problem.length ? problem[0].id : 0};
您也可以考慮使用Promise.all使代碼并行運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/340756.html
標籤:javascript mysql 异步等待
