首页 > 解决方案 > 当它在等待时返回null时如何处理mysql查询?

问题描述

我有一个带有多个 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?

谢谢你。

标签: javascriptmysqlasync-await

解决方案


如果doquery总是返回解析为数组的 Promise,则需要在访问[0]第 th 个元素的属性之前检查该数组是否已填充。

回来的时候换

problem : problem[0].id};

problem : problem.length ? problem[0].id : 0};

您也可以考虑使用Promise.all使代码并行运行。


推荐阅读