NEWS
JS-Funktion für influxDB2 ohne "await wait(xxxx)" möglich?
-
Hallo,
ich nutze folgende Funktion in meinen Blocklys für die Abfrage der Influx Datenbank
var ergebnis; sendTo('influxdb.0', 'query', 'from(bucket: "'+Bucket+'") |> range(start: '+Start+', stop: '+Ende+') |> filter(fn: (r) => r["_measurement"] == "'+Datenpunkt+'") |> filter(fn: (r) => r["_field"] == "value") |> filter(fn: (r) => r._value > 0) |> group() |>'+Wert+'()', function (result) { if (result.error) { console.error(result.error); } else { ergebnis = JSON.stringify(result); } }); await wait(1000); return ergebnis;Es funktioniert auch alles, jedoch stört mich das "await wait(xxxx)" am Ende.
Gibt es eine Möglichkeit, dass das Ergebnis "returniert" wird sobald es vorhanden ist? -
Hallo,
ich nutze folgende Funktion in meinen Blocklys für die Abfrage der Influx Datenbank
var ergebnis; sendTo('influxdb.0', 'query', 'from(bucket: "'+Bucket+'") |> range(start: '+Start+', stop: '+Ende+') |> filter(fn: (r) => r["_measurement"] == "'+Datenpunkt+'") |> filter(fn: (r) => r["_field"] == "value") |> filter(fn: (r) => r._value > 0) |> group() |>'+Wert+'()', function (result) { if (result.error) { console.error(result.error); } else { ergebnis = JSON.stringify(result); } }); await wait(1000); return ergebnis;Es funktioniert auch alles, jedoch stört mich das "await wait(xxxx)" am Ende.
Gibt es eine Möglichkeit, dass das Ergebnis "returniert" wird sobald es vorhanden ist?so gehts
return new Promise((resolve, reject) => { let value = 0; let query = [ 'from(bucket: "'+Bucket+'")', '|> range(start: '+Start+', stop: '+Ende+')', '|> filter(fn: (r) => r["_measurement"] == "'+Datenpunkt+'")', '|> filter(fn: (r) => r["_field"] == "value")', '|> filter(fn: (r) => r._value > 0) |> group()', '|> '+Wert+'()'].join(''); sendTo('influxdb.0', 'query', query, function (result) { if (result.error) { reject(result.error); } else { value = JSON.stringify(result); resolve(value); }; }); }); -
so gehts
return new Promise((resolve, reject) => { let value = 0; let query = [ 'from(bucket: "'+Bucket+'")', '|> range(start: '+Start+', stop: '+Ende+')', '|> filter(fn: (r) => r["_measurement"] == "'+Datenpunkt+'")', '|> filter(fn: (r) => r["_field"] == "value")', '|> filter(fn: (r) => r._value > 0) |> group()', '|> '+Wert+'()'].join(''); sendTo('influxdb.0', 'query', query, function (result) { if (result.error) { reject(result.error); } else { value = JSON.stringify(result); resolve(value); }; }); });so, nächstes Problem.
Das Script funktioniert, jedoch stürzt der Javascript Adapter bei Fehlern ab.Ich wollte es nun in ein try / catch verpacken.
Der Adapter stürzt jetzt zwar nicht mehr ab, aber der Fehler wird bei catch nicht sauber in der Konsole ausgegeben.
Wo liegt mein Fehler?try { return new Promise((resolve, reject) => { let Ergebnis = 0 let settings = [ 'import "timezone"', 'import "date"', 'option location = timezone.location(name: "Europe/Berlin")', 'from(bucket: "'+Bucket+'")', '|> range(start: -'+Start+')', '|> filter(fn: (r) => r["_measurement"] == "'+Datenpunkt+'")', '|> filter(fn: (r) => r["_field"] == "value")', '|> aggregateWindow(every: '+Aggregation+', fn: '+fn+', createEmpty: false) ', ].join(''); sendTo('influxdb.0', 'query', settings, function (query) { Ergebnis = query.result[0].map(elm => ({ t: (elm.ts !== null && elm.ts !== undefined) ? elm.ts : null, y: (elm._value !== null && elm._value !== undefined) ? elm._value : null })) resolve(Ergebnis) }) }) } catch (error) { console.warn(error) }
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden