如何从async异步函数中返回多个结果并在then方法中正确获取?
你只需要调整memberdata异步函数的返回值结构,和你预期的取值格式对齐即可,then 方法的调用语法不需要做任何修改,可选的实现方案如下:
方案1:最优实现(推荐,仅发起1次查询,性能最好)
你三个查询都是查同表同id的不同字段,完全可以合并为一次数据库查询,无需分三次请求:
const memberdata = async function() { // 一次查询直接返回三个字段的结果,格式和你原有单字段查询的返回结构一致 const res = await doquery('name,sex,age','members','id',userid); return res; };
调整后你原有写好的then取值代码可以直接使用,不需要修改。
方案2:保留三次查询的实现(如果业务必须拆分查询)
如果必须拆分三次单独查询,你需要把三次查询的结果拼接为你预期的结构再返回,同时推荐用Promise.all实现并行查询,比串行await性能更高:
const memberdata = async function() { // 并行发起三个查询,等待所有查询完成后解构结果 const [nameRes, sexRes, ageRes] = await Promise.all([ doquery('name','members','id',userid), doquery('sex','members','id',userid), doquery('age','members','id',userid) ]); // 拼接为你预期的数组嵌套对象格式 return [{ name: nameRes[0].name, sex: sexRes[0].sex, age: ageRes[0].age }]; };
该方案下你原有写好的then取值代码同样可以直接使用,不需要调整。
内容的提问来源于stack exchange,提问作者Cain Nuke
相关产品推荐
相关产品推荐

