Node.js 从XDB查询返回值时如何修复“Promise{}”?

Node.js 从XDB查询返回值时如何修复“Promise{}”?,node.js,promise,influxdb,Node.js,Promise,Influxdb,我想从XDB中获取多个节点的时间跨度平均值。 我使用promise函数来获得同步结果 问题是: 即使在函数完成后,承诺仍处于挂起状态 我怎样才能解决这件事 我是NodeJs的新手,所以请不要恨我 系统设置: 操作系统:Ubuntu 18.04 LTS服务器| NodeJs:v12.8.1 | INfluxDB shell:0.12.2 这是我正在使用的代码。我添加了console.logs以查看错误的位置 function parseData(go1, go2, mac, zeit, meter

我想从XDB中获取多个节点的时间跨度平均值。 我使用promise函数来获得同步结果

问题是: 即使在函数完成后,承诺仍处于挂起状态

我怎样才能解决这件事

我是NodeJs的新手,所以请不要恨我

系统设置: 操作系统:Ubuntu 18.04 LTS服务器| NodeJs:v12.8.1 | INfluxDB shell:0.12.2

这是我正在使用的代码。我添加了console.logs以查看错误的位置

function parseData(go1, go2, mac, zeit, meter)     {
        var anz = go1[0].count;
        var transfer = [];
        for (i = 0; i < anz; i++)   {

            transfer.push(checkValue(i, go2, mac, zeit, meter, anz))

        }
        console.log(transfer);
}

function checkValue(i, go2, mac, zeit, meter, anz){
    return new Promise(function(resolve, reject){
        var Node = go2[i].distinct;
        var query = `select mean(rssi) from "` + mac +`" where time > (now() - ` + zeit + `m) AND rssi < ` + meter + ` AND Node = '` + Node + `'`;
        console.log(query);
        influx.query(
            query
        )
        .then(
            result=>{
                var pars = result;
                var res = pars[0].mean;
                var eintrag = [];
                eintrag.push(Node);
                eintrag.push(res);
                console.log(eintrag);
                return resolve([eintrag]);                              
            }
        );    
    });
}
这是我当前的console.log

select mean(rssi) from "75*****500eb" where time > (now() - 3600m) AND rssi < 20 AND Node = 'ble*1*pi'
select mean(rssi) from "75*****500eb" where time > (now() - 3600m) AND rssi < 20 AND Node = 'ble*2*pi'
[ Promise { <pending> }, Promise { <pending> } ]
[ 'ble*1*pi', 9.027241718321147 ]
[ 'ble*2*pi', 18.86637795689184 ]
执行console.log时,承诺尚未完成

请看一下这个问题:

我建议您使用Wait Promise。所有:

在您的具体情况下,您可以执行以下操作:

async function parseData(go1, go2, mac, zeit, meter)     {
        var anz = go1[0].count;
        var transfer = [];
        for (i = 0; i < anz; i++)   {

            transfer.push(checkValue(i, go2, mac, zeit, meter, anz))

        }
        console.log(await Promise.all(transfer));
}

可能重复当一个问题与另一个问题完全重复时,请标记/投票将该问题作为重复问题关闭,而不是使用从canonical获得的相同信息发布另一个答案。如果你有什么新的东西要添加,把它添加到规范的Q+A中。
async function parseData(go1, go2, mac, zeit, meter)     {
        var anz = go1[0].count;
        var transfer = [];
        for (i = 0; i < anz; i++)   {

            transfer.push(checkValue(i, go2, mac, zeit, meter, anz))

        }
        console.log(await Promise.all(transfer));
}