koaJS数据获取正确但是不能返回给前端

具体接口代码如下。

修改了一下格式,求指教,循环为何只能取到第一次的数据:

'use strict';
const organizationDb = '../../../models/organization';
const userOrganizationDb = '../../../models/user_organization';

module.exports = async function (ctx) {
    
    try {
        const res = await getDbData(ctx);
        ctx.json({
            status: 0,
            msg: '成功',
            res
        });
    } catch (error) {
        console.log(error);
        ctx.json({
            status: 1,
            msg: '失败'
        });
    }
};

function getDbData(ctx){
    const db = ctx.app.db;
    const organizationModel = db.import(organizationDb);
    const userOrganizationModel = db.import(userOrganizationDb);
    let results = [];
    
    return new Promise((resolve, reject) => {
    
        organizationModel.findAll({
            where:{
                name: {
                    $like: 'ext-%'
                }
            }
        }).then(ori => {
            Array.from(ori).forEach(record => {
                userOrganizationModel.findAll({
                    where: {
                        'organization_id':record.id
                    }
                }).then(result => {
                    //只会返回第一次循环的内容,后续的内容push不到数组里,为什么,应该在哪里resolve呢?
                    results.push(result);
                    resolve(results);
                })
            });
        });
    });

}
阅读 2.7k
3 个回答

使用await的时候then和catch是无效的

'use strict';
const organizationDb = '../../../models/organization';
const userOrganizationDb = '../../../models/user_organization';

module.exports = async function (ctx) {
    // 引入数据库依赖
    const db = ctx.app.db;
    const organizationModel = db.import(organizationDb);
    const userOrganizationModel = db.import(userOrganizationDb);
try{
    const data = await Promise1xxx;
    const data2 = await Promise2xxx(data);
    ctx.body = data2; 
    }
    catch(e) {
    ctx.body = {
        errmsg:e.message
    };
   }
};

你代码问题太多了

  1. async/await promise混用
  2. forEach中使用了return,其实外面拿不到
  3. 没有使用标准的try/catch去写koa

建议学习一下 async 函数的正确用法~
await了,就不需要then
这个是教程

用了await,不会有then回调,另外两位说的是对的,我搞错了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题