javascript - promise mongoose 循环遍历查询
天蓬老师
天蓬老师 2017-06-29 10:09:23
[Node.js讨论组]
let result = []; //存放查询结果
model.WithdrawModel.find({status:'processing'}, (err, doc) => {
            if (err) {
                console.log(err);
                res.json({ code: -1, msg: '查询失败'});
                return;
            } else {
                doc.map((item) => {
                    model.UserModel.findOne({phone:item.phone},'name IDcard bank bankCard bank_area bank_name', (err, bankInfo) => {
                        if (err) {
                            console.log(err);
                        } else {
                            let obj = {};
                            Object.assign(obj, JSON.parse(JSON.stringify(item)), JSON.parse(JSON.stringify(bankInfo)));
                            result.push(obj);
                            console.log(result); 
                        }
                    })
                });
                res.json({ code: 0, msg: '查询成功', result: result});
                return;
            }
 });

循环遍历查询,上述 result 直接返回空值,请问怎么保证 doc.map 内部的查询都结束之后再取出 result 的值?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
代言

由于Promise是异步调用,所以在所有的查询之后使用return,会在还没真正获取到数据之后就返回,所以需要Promise内添加一个计数器count,在所有的Promise下,加一个循环,当所有的doc都循环到了(count == doc.length),才可以输出返回。

const deasync = require('deasync'); // 引入deasync包
...
let result = []; //存放查询结果
model.WithdrawModel.find({status: 'processing'}, (err, doc) => {
    if(err) {
        console.log(err);
        res.json({code: -1, msg: '查询失败'});
        return;
    } else {
        let count = 0, len = doc.length;

        doc.forEach((item, index) => {
            model.UserModel.findOne({phone: item.phone}, 'name IDcard bank bankCard bank_area bank_name', (err, bankInfo) => {
                if (err) {
                    console.log(err);
                } else {
                    let obj = {};
                    Object.assign(obj, JSON.parse(JSON.stringify(item)), JSON.parse(JSON.stringify(bankInfo)));
                    result.push(obj);
                    console.log(result); 
                }

                count++;
            });
        });

        deasync.loopWhile(() => count < len);

        res.json({code: 0, msg: '查询成功', result: result});
        return;
    }
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号