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