node.js - mongodb多条查询,如何在所有查询执行完成后再回显到页面。

浏览:69日期:2023-06-15

问题描述

router.get(’/test.node’, function(req, res, next) { //定义回显的msg var msg = {stats: 1,err: [],main: {},mark: ’’ }; //查询数据1 var paywayList = []; //查询数据2 var tradeList = []; //查询数据3 var rechargeList = []; //查询数据4 var tradeSum = {};//每查询一次调用一次okCountFunc() //查询数据1 bossService.getPaywayListByMerchant(merchantId, branchId, function(items) {paywayList = items;okCountFunc(); }); //查询数据2 bossService.getPaysumListByMerchant(merchantId, branchId, params.startDate, params.endDate, function(items) {tradeList = items;okCountFunc(); }); //查询数据3 bossService.getVippaysumListByMerchant(merchantId, branchId, params.startDate, params.endDate, function(items, objs) {rechargeList = objs;okCountFunc(); }); //查询数据4 bossService.getDaysumListByMerchant(merchantId, branchId, params.startDate, params.endDate, function(list, sum) {tradeSum = sum;okCountFunc(); });//统计计数 var okCount = 0; var okCountFunc = function() {okCount++;if (okCount == 4) { //到这里查询已全部结束 //最后合并该统计数据 msg.main.paywayList = paywayList; msg.main.tradeList = tradeList; msg.main.rechargeList = rechargeList; msg.main.tradeSum = tradeSum; res.send(msg);} }});

有没有更加便捷的方法,当所有查询执行完成后再回显到页面。

promise?有没有demo.

问题解答

回答1:

var msg = { stats: 1, err: [], main: {}, mark: ’’};const task1 = new Promise((resolve, reject) => { bossService.getPaywayListByMerchant(merchantId, branchId, (items) => {msg.main.paywayList = items;return resolve(); });});const task2 = ...Promise.all([task1, task2, ...]).then(() => { res.send(msg);});

相关文章: