@hanss das Stichwort lautet async/await und Promise.
function askSQLgh(id, start, end) { const startTime = millis() return new Promise(resolve => { sendTo( 'sql.0', 'getHistory', { id: id, options: { start: start, end: end, aggregate: 'none' } }, data => { let min = data.result[0].val; const min_ts = data.result[0].ts let max = min; const max_ts = data.result[0].ts let sum = 0; let mean = 0; const anzahl = data.result.length // ACHTUNG: liefert nur 500 Ergebnisse let first = 0 // first value let last = 0 // last value for (let i = 0; i < anzahl; i++) { if (i==0){ first = data.result[i].ts } if (i==(data.result.length-1)){ last = data.result[i].ts } sum += data.result[i].val; if(data.result[i].val < min) { min = data.result[i].val; min_ts = data.result[i].ts; } if(data.result[i].val > max) { max = data.result[i].val; max_ts = data.result[i].ts; } } mean = sum / anzahl resolve( { min, min_ts, max, max_ts, mean, sum, anzahl, first, last, startTime } ); } ); }); }und der Aufruf geschieht dann wie folgt:
const sqlResult = await askSQLgh('deineID', start, end);Der Aufruf muss aber in einer Async Funktion stehen.
async function test() { const sqlResult = await askSQLgh('deineID', start, end); //hier kannst du dann mit dem zurückgegebenen Objekt weiterarbeiten. }