javascript - 当它在等待时返回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?
谢谢你。
解决方案
如果doquery
总是返回解析为数组的 Promise,则需要在访问[0]
第 th 个元素的属性之前检查该数组是否已填充。
回来的时候换
problem : problem[0].id};
至
problem : problem.length ? problem[0].id : 0};
您也可以考虑使用Promise.all
使代码并行运行。
推荐阅读
- python - 尝试不同版本的网站地址 - Python
- node.js - 尝试安装 asyncawait 模块,总是失败并返回相同的错误
- c - 如何使用 getcontext() 和 setcontext() 进行多线程处理?
- r - 替换 tibble 中的日期 NA
- java - Java不好的做法:将return语句添加到仅用于测试的方法?
- angular - 工具提示作为动态组件
- javascript - 在使用角度文件删除时选择所有复选框时出现问题
- javascript - 以数组和多维对象的角度显示 API 结果
- angular - Angular5 - 业力/茉莉花测试在添加额外测试时失败
- python - 如何在熊猫数据框列上实现功能