forEach遍历数组查询数据库,返回多个Promise,如何接收?

发布于 2022-09-12 13:27:30 字数 889 浏览 11 评论 0

forEach遍历数组查询数据库,返回多个Promise,如何接收?

本人小白,没有系统的学过nodejs和es6,平常也就写个增删改查,面向百度足够了。但是最近在帮同事做一个分析系统的时候,出现了问题。有一个数组每项都是一个对象([{num:500},{num:600}]差不多就是这样),现在需要把这个数组中包含的对象都做为sql查询语句的where条件(“select * from biao where num = ”+item.num),于是就想用forEach来循环这个数组。由于涉及到异步同步的问题,于是就想每次循环return一个Promise对象,再.then(根据本人现在知识水平只想到了这)。那么就有了开篇的问题,每循环查询一次返回一个Promise,如何汇总这些promise,然后对他们进行操作呢?我已经看到其他回答类似的功能是用的Array.map,但是forEach就没有方法吗?

查询数据库函数封装:

 function chaxun (arr){
    var sql = `select * from tb where num = `;
    arr.forEach(function(item,index){
        return new Promise(function(resolve,reject){
            db.query(sql+item.num,row=>{
                resolve(row);
            })
        })
    })
}

async 函数:

cxtb : async function(yishuzu,ershuzu){
    const yires = await chaxun(yishuzu);
    return yires;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清风不识月 2022-09-19 13:27:30
 function chaxun (arr){
    var sql = `select * from tb where num = `;
    var temp = []
    arr.forEach(function(item,index){
        temp.push(new Promise(function(resolve,reject){
            db.query(sql+item.num,row=>{
                resolve(row);
            })
        }))
    })
    return temp
}
cxtb : function(yishuzu,ershuzu){
    Promise.all(temp).then(res => { console.log('这样试试看呢?')})
}
等待我真够勒 2022-09-19 13:27:30

forEach换成map

 function chaxun (arr){
    var sql = `select * from tb where num = `;
    return arr.map(function(item,index){
        return new Promise(function(resolve,reject){
            db.query(sql+item.num,row=>{
                resolve(row);
            })
        })
    })
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文