从 influxdb-query 返回值时如何修复 "Promise { <pending>}"?
How to fix "Promise { <pending>}" when returning values from influxdb-query?
我想从多个节点的 influxdb 中获取时间跨度的平均值。
我使用 promise 函数来获得同步结果。
问题:
即使在函数完成后,承诺仍未决。
我该如何解决这个问题?
我是 NodeJs 的新手,所以请不要讨厌。
系统设置:
OS: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
时,承诺尚未完成。
请看一下这个问题:
我建议你使用 await Promise.all
:
const main = async () => {
const arrayOfResults = await Promise.all([checkValue(...), checkValue(...)])
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
根据您的具体情况,您可以执行以下操作:
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));
}
我想从多个节点的 influxdb 中获取时间跨度的平均值。 我使用 promise 函数来获得同步结果。
问题:
即使在函数完成后,承诺仍未决。
我该如何解决这个问题?
我是 NodeJs 的新手,所以请不要讨厌。
系统设置:
OS: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
时,承诺尚未完成。
请看一下这个问题:
我建议你使用 await Promise.all
:
const main = async () => {
const arrayOfResults = await Promise.all([checkValue(...), checkValue(...)])
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
根据您的具体情况,您可以执行以下操作:
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));
}