NEWS
async, await mit selector oder schleife????
-
@ple sagte in async, await mit selector oder schleife????:
Gibt es dafür vielleicht eine Lösung?
Wenn du uns deinen bisherigen Code verheimlichst, eher nicht
-
@alcalzone
Man, da bin ich mal wieder sparsam mit InformationenCode für den RFID Leser wäre folgender.
// in ES6 //import { NFC } from 'nfc-pcsc'; // without Babel in ES2015 var { NFC } = require('nfc-pcsc'); var nfc = new NFC(); // optionally you can pass logger nfc.on('reader', reader => { console.log(`${reader.reader.name} device attached`); // enable when you want to auto-process ISO 14443-4 tags (standard=TAG_ISO_14443_4) // when an ISO 14443-4 is detected, SELECT FILE command with the AID is issued // the response is available as card.data in the card event // see examples/basic.js line 17 for more info // reader.aid = 'F222222222'; reader.on('card', card => { // card is object containing following data // [always] String type: TAG_ISO_14443_3 (standard nfc tags like MIFARE) or TAG_ISO_14443_4 (Android HCE and others) // [always] String standard: same as type // [only TAG_ISO_14443_3] String uid: tag uid // [only TAG_ISO_14443_4] Buffer data: raw data from select APDU response console.log(`${reader.reader.name} card detected`, card); console.log(card.uid) }); reader.on('card.off', card => { console.log(`${reader.reader.name} card removed`, card); reader.disconnect() }); reader.on('error', err => { console.log(`${reader.reader.name} an error occurred`, err); }); reader.on('end', () => { console.log(`${reader.reader.name} device removed`); reader.disconnect() }); }); nfc.on('error', err => { console.log('an error occurred', err); });
Und für Daten Schreiben auf dem SQL.
async function Meta_schreiben() { var SpeicherZeit = timeCon() setState("javascript.0.Ablauf.Timestamp", SpeicherZeit) var Rezept_Nr = getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val var Tabelle var DB = "Anlagen_Produktdaten"; if (Rezept_Nr <= 5) { Tabelle = "2590C" } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) { Tabelle = "2590M" } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) { Tabelle = "2590E" } let ssql = "INSERT INTO [" + DB + "].[dbo].[" + Tabelle + "]\ ([Timestamp]\ ,[Jahr_Nr]\ ,[Tag_Nr]\ ,[Id_Nr]\ ,[Typ_Name]\ ,[Typ_Nr]\ ,[Bediener]\ ,[DMC]\ ,[DMC_Kz_Motor]\ ,[DMC_Kz_Hauptgruppe_Bauteil]\ ,[DMC_Kz_Teile_Typ]\ ,[DMC_Kz_Untergruppe_Bauteil]\ ,[DMC_Q_Status]\ ) VALUES ( \ '" + SpeicherZeit + "' \ ,'" + getState("javascript.0.DMC_Kamera.Jahr_Nr").val + "' \ ,'" + getState("javascript.0.DMC_Kamera.Tag_Nr").val + "' \ ,'" + getState("javascript.0.DMC_Kamera.Id_Nr").val + "' \ ,'" + getState("javascript.0.Rezepte.Rezept_DS_Name").val + "' \ ,'" + getState("javascript.0.Rezepte.Rezept_DS_Nr").val + "' \ ,'" + getState("javascript.1.RFID_Name").val + "' \ ,'" + getState("javascript.0.DMC_Kamera.DMC").val.slice(0, 36) + "' \ ,'" + getState("javascript.0.DMC_Kamera.Kz_Motor").val + "' \ ,'" + getState("javascript.0.DMC_Kamera.Kz_Hauptgruppe_Bauteil").val + "' \ ,'" + getState("javascript.0.DMC_Kamera.Kz_Teile_Typ").val + "' \ ,'" + getState("javascript.0.DMC_Kamera.Kz_Untergruppe_Bauteil").val + "' \ ,'" + getState("javascript.0.DMC_Kamera.Qstatus").val + "' \ )"; // SQL Daten schreiben sendTo('sql.1', 'query', ssql); console.log(ssql) console.log("Metadaten wurde geschrieben") }
-
@ple Na das ist doch schon besser. Allerdings verstehe ich noch nicht, was ganz spezifisch dein Problem ist.
Vielleicht zeigst du das noch an einem Beispiel, z.B. mit logs oder so? Der Code sieht auf den ersten Blick nicht falsch aus. -
@alcalzone
hier mal ein Beispiel, Javascript instanz neugestartet und RFID eingelesen, wurde auch nur 1 mal gelesen, so wie es auch sollte.
Danach das Script ein paar mal neu gestartet, danach kommt der Inhalt mehrmals, halt so oft wie das Script neu gestartet wurde. Denke der öffnet jeweils eine neue Verbindung zum Reader und somit kommt es öfters.11:06:01.417 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected 11:06:01.418 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38 11:06:01.720 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:07.946 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:07.949 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:07.968 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:07.991 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:07.993 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:08.155 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.156 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.168 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:08.182 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:08.184 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:08.365 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.367 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.380 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:08.395 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:08.396 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:08.581 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.582 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.598 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:08.613 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:08.615 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:08.765 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.767 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.779 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:08.793 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:08.795 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:08.911 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.916 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:08.934 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:08.957 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:08.959 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:09.273 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:09.274 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:09.288 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:09.303 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:09.305 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:10.450 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:10.452 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:10.469 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:10.481 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:10.483 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:10.617 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:10.618 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:10.635 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:10.648 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:10.650 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:10.785 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:10.786 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:10.799 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:10.811 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:10.813 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:10.912 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:10.915 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:10.949 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:10.970 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:10.972 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:11.028 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.030 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.048 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:11.066 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:11.068 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:11.161 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.163 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.185 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:11.202 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:11.204 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:11.329 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.329 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.346 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:11.363 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:11.364 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:11.445 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.449 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.465 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:11.484 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:11.485 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:11.569 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.570 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.589 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:11.614 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:11.616 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:11.769 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.768 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.781 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:11.796 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:11.798 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:11.937 info javascript.0 (31556) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.938 info javascript.1 (24248) Stop script script.js.Benutzer.Test_Cardreader 11:06:11.962 info javascript.1 (24248) Start javascript script.js.Benutzer.Test_Cardreader 11:06:11.973 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: registered 0 subscriptions and 0 schedules 11:06:11.975 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 device attached 11:06:14.533 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected 11:06:14.534 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38 11:06:14.560 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected 11:06:14.561 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38 11:06:14.581 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected 11:06:14.581 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38 11:06:14.605 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card detected 11:06:14.605 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: 74c3fe38 11:06:14.663 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:14.765 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:14.868 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:14.971 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.074 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.178 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.179 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.179 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.180 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.180 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.181 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.181 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.181 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.182 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.182 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.182 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.183 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.183 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.186 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.187 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.188 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.189 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.192 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.193 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.193 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.194 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.195 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.195 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.280 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.280 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.383 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.384 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed 11:06:15.486 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 an error occurred 11:06:15.487 info javascript.1 (24248) script.js.Benutzer.Test_Cardreader: ACS ACR122U PICC Interface 00 00 card removed
-
@ple Ich vermute, da müsste mindestens mal beim Skriptende die Verbindung geschlossen werden:
onStop(() => { nfc.close(); });
-
@alcalzone sagte in async, await mit selector oder schleife????:
@ple Ich vermute, da müsste mindestens mal beim Skriptende die Verbindung geschlossen werden:
onStop(() => { nfc.close(); });
So, habs mal ein paar Wochen immer mal wieder probiert, klappt nicht wie gehofft, egal.
nun habe ich ein größeres Problem, anscheinend habe ich immer noch nicht gecheckt wie man am besten eine Schrittkette aufbaut, wenn in der Schrittkette eine weitere Schrittkette aufgerufen werden soll, so das der Code komplett asyncron aufgerufen wird. Ich muss echt noch viel lernen.
Also das was ich erreichen möchte ist folgendes.In Main werden einzelne Funktionen aufgerufen // alles asyncron // alte Daten löschen await loeschen() // eine Rezeptsuche await Rezeptsuche() // Mehrere SQL Tabelle Daten abholen await Daten_lesen() // Danach Metadaten schreiben auf dem SQL await Meta_schreiben()
So, nun ist es so, dass ich in Daten_lesen() mehrere SQL Querys absetze und ich darauf warten möchte. Es kann mal sein, das keine Daten zurückkommen, z.B. wenn die Netzwerkverbindung abschmiert.
Also mehrere Funktionen verschachtelt, die asyncron ablaufen sollen, und genau da hänge ich.Oft bekomme ich folgende Fehler, weil ich irgendwo asyncron abarbeite aber keine Fehlerbehandlung gemacht habe.
2022-06-21 08:12:29.120 - error: javascript.0 (19020) Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). 2022-06-21 08:12:29.121 - error: javascript.0 (19020) unhandled promise rejection: undefined 2022-06-21 08:12:29.122 - error: javascript.0 (19020) undefined
Würdest du mir da vielleicht noch ein paar Dinge erklären, wie man es am einfachsten macht, damit ich das verstehe? Denke das werde ich in Zukunft öfter gebrauchen müssen.
Anbei mal der vereinfachte Code.
var Meldungen var DMC /************************* Main ******************************* */ async function main() { try { setState(Meldungen, "Alte Daten werden gelöscht") await loeschen() await setStateAsync(Trigger_neue_Nummer, false); setState(Meldungen, "Rezept wird gesucht") await Rezeptsuche() setState(Meldungen, "Daten werden gelesen") await Daten_lesen() await Meta_schreiben() } catch (e) { setState(Meldungen, ("Fehler in Main: " + e)) console.error("Fehler in Main: " + e); } finally { } } /************************* alte Daten löschen ******************************* */ async function loeschen() { await $('state[state.id=javascript.0.Daten_senden.A_654_Endkontrolle.*]').setStateAsync(false) await $('state[state.id=javascript.0.Daten_lesen.A_654_Endkontrolle.*]').setStateAsync(false) console.log("************ Daten gelöscht") } //############################################## Rezept suchen ############################################## async function Rezeptsuche() { var DS_Nr = 0 var DS_gefunden = false var Suche_beendet = false var treffer = false for (i = 1; i <= 20; i++) { var i = "000" + i; i = i.substring(i.length - 2, i.length); treffer = true DS_gefunden = true if (!getState('javascript.0.Rezepte.' + i + '.Rezept_aktiv').val) { treffer = false; DS_gefunden = false; } else { for (a = 1; a <= 36; a++) { var a = "000" + a; a = a.substring(a.length - 2, a.length); if (getState('javascript.0.Rezepte.' + i + '.DMC_aktiv_' + a).val) { if (!(getState('javascript.0.Rezepte.' + i + '.DMC_Wert_' + a).val == (DMC.slice(a - 1, a)))) { treffer = false DS_gefunden = false } } } } if (treffer) { DS_Nr = i DS_gefunden = true await setStateAsync('javascript.0.Rezepte.Rezept_DS_gefunden', true) console.log("***** Rezept gefunden") break; } else { } } await setStateAsync("javascript.0.Rezepte.Rezept_DS_Nr", DS_Nr) //console.log("Rezept gefunden: " + getState("javascript.0.Rezepte.Rezept_DS_Nr").val) //console.log("*************** Rezept gefunden") } //############################################## Daten Lesen Main ############################################## async function Daten_lesen() { if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val <= 5) { await Daten_lesen_SQL('0265') await Daten_lesen_SQL('U_654') await Daten_lesen_SQL('U_655') await Daten_lesen_SQL('A_656') } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) { await Daten_lesen_SQL('0290') await Daten_lesen_SQL('A_656') } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) { await Daten_lesen_SQL('0290') await Daten_lesen_SQL('A_656') } } //############################################## Daten Lesen der einzelnen Tabellen ############################################## async function Daten_lesen_SQL(Tabelle) { var Data; var i; var Spaltenname; var Data_Column = {}; var DB = "Testdaten"; var sql_string switch (Tabelle) { case '2590C': sql_string = "USE " + DB + " SELECT TOP (1) * \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ ORDER BY id DESC" break; case '2590M': sql_string = "USE " + DB + " SELECT TOP (1) * \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ ORDER BY id DESC" break; case '2590E': sql_string = "USE " + DB + " SELECT TOP (1) * \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ ORDER BY id DESC" break; case '0265': sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ ORDER BY id DESC" break; case '0290': sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ ORDER BY id DESC" break; case '0650': sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Jahr_Nr, Tag_Nr, Id_Nr \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ ORDER BY id DESC" break; case 'U_654': sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, AnlagenNr \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ " break; case 'U_655': sql_string = "USE " + DB + " SELECT TOP (1) Timestamp, Anlagen_Nr \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ " break; case 'A_656': sql_string = "USE " + DB + " SELECT TOP (1) * \ FROM dbo.[" + Tabelle + "] \ WHERE (Jahr_Nr = " + DMC_Jahr_Nr + ") AND (Tag_Nr = " + DMC_Tag_Nr + ") AND (ID_Nr = " + DMC_Id_Nr + ") \ " break; default: break; } setState(Meldungen, "Lese Daten von Tabelle: " + Tabelle); console.log("Lese Daten von Tabelle: " + Tabelle) const result = await sendToAsync('sql.1', 'query', sql_string); Data = (result[0]); for (Spaltenname in Data) { let x = Data[Spaltenname]; let Daten = JSON.stringify(x); if (typeof Data === 'undefined') { //log(Tabelle + " keine Daten vorhanden"); } if (typeof Data !== 'undefined') { // States anlegen if (await existsStateAsync('javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname)) { //log(Spaltenname + " " + Daten) if (Spaltenname == "Timestamp") { Daten = Daten.replace('Z', ''); } Daten = Daten.replace('"', ''); Daten = Daten.replace('"', ''); await setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten); } else { // Daten lesen Datenpunkte werden erzeugt await createStateAsync('javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname, '', { name: Spaltenname, type: 'mixed', role: 'state' }); await setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten); log("State wurde erstellt " + 'javascript.0.Daten_lesen.' + Tabelle + '.' + Spaltenname) // Daten senden Datenpunkte werden erzeugt await createStateAsync('javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname, '', { name: Spaltenname, type: 'mixed', role: 'state' }); await setStateAsync('javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname, Daten); log("State wurde erstellt " + 'javascript.0.Daten_senden.' + Tabelle + '.' + Spaltenname) } } } } /******************************* Metadaten schreiben *********************** */ async function Meta_schreiben() { await timeCon() var Rezept_Nr = getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val var Tabelle var DB = "Test"; if (Rezept_Nr <= 5) { Tabelle = "A_656" } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 6) { Tabelle = "A_656" } else if (getState('javascript.0.Rezepte.Rezept_DS_Nr'/*Rezept DS Nr*/).val = 7) { Tabelle = "A_656" } let ssql = "INSERT INTO [" + DB + "].[dbo].[" + Tabelle + "]\ ([Timestamp]\ ,[Typ_Nr]\ ) VALUES ( \ '" + getState('javascript.0.Ablauf.Timestamp').val + "' \ ,'" + getState("javascript.0.Rezepte.Rezept_DS_Nr").val + "' \ )"; sendTo('sql.1', 'query', ssql); console.log("******** Metadaten wurde geschrieben") } /******************************* Timestamp für MS SQL zusammenstellen *********************** */ async function timeCon() { var a = new Date(Date.now()); var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var year = a.getFullYear(); var month = months[a.getMonth()]; var date = a.getDate(); var hour = a.getHours(); var min = a.getMinutes(); var sec = a.getSeconds(); var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec; await setStateAsync('javascript.0.Ablauf.Timestamp', time) } /******************************** String to boolean ***************** */ function STB(Wert) { switch (Wert.toLowerCase().trim()) { case "true": case "yes": case "1": return true; case "false": case "no": case "0": case null: case "null": return false; //default: return Boolean(Wert); default: return Wert; } } /******************************** Bit to integar ***************** */ function BTI(Wert) { var Ergebnis if (Wert) { Ergebnis = 1 } else { Ergebnis = 0 } return Ergebnis } /********************************SQL Sendto Wrapper ***************** */ function sendToAsync(instance, command, arg) { return new Promise((resolve, reject) => { sendTo(instance, command, arg, (result) => { if (result.error) { reject(result.error); } else { resolve(result.result); } }); }); }
-
In Zeile 1-10 rufst du await functionen auf ohne Try/catch dadurch Schmiert dein Script gerade ab.
-
@dutchman
Besten dank schon mal im voraus für deine Hilfe.
Um das für mich zu verstehen, was für andere wahrscheinlich selbstverständlich ist, benötigt man immer ein try and catch in jeder await funktion die ich so aufrufe? Würde dann beim einem Fehler in einer await funktion das catch greifen und damit würde das main trotzdem weitergehen?also so dann ungefähr?
async function main() { try { setState(Meldungen, "Alte Daten werden gelöscht") await loeschen() await setStateAsync(Trigger_neue_Nummer, false); setState(Meldungen, "Rezept wird gesucht") await Rezeptsuche() setState(Meldungen, "Daten werden gelesen") await Daten_lesen() await Meta_schreiben() } catch (e) { setState(Meldungen, ("Fehler in Main: " + e)) console.error("Fehler in Main: " + e); } finally { } } /************************* alte Daten löschen ******************************* */ async function loeschen() { try { await $('state[state.id=javascript.0.Daten_senden.A_654_Endkontrolle.*]').setStateAsync(false) await $('state[state.id=javascript.0.Daten_lesen.A_654_Endkontrolle.*]').setStateAsync(false) console.log("************ Daten gelöscht") } catch (e) { console.error("Fehler beim löschen: " + e) } }
Hat einer vielleicht noch ne guten Tip für Schulungen zu Javascript, oder bietet vielleicht einer sowas auch an?
Gruß und Danke
-
@ple sagte in async, await mit selector oder schleife????:
Um das für mich zu verstehen, was für andere wahrscheinlich selbstverständlich ist, benötigt man immer ein try and catch in jeder await funktion die ich so aufrufe?
korrekt sollte man so machen, den die Meldung
Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
kommt von der await function und das die promise (siehe erklaehrung @AlCalzone) ein throw error macht dieser error aber nicht abgefangen wird.
Mit try catch kannst du dies fehler dan im catch abfangen und Aktionen auslösen.
Kann mir z.b. vorstellen wenn einer der schritte schiefgeht, die anderen auch nicht stattfinden sollten?@ple sagte in async, await mit selector oder schleife????:
Würde dann beim einem Fehler in einer await funktion das catch greifen und damit würde das main trotzdem weitergehen?
richtig verstanden, beachte hierbei aber ob der code weiter laufen darf wenn die function einen Fehler abgegeben hat, Beispiel :
Ich habe einige adapter die frage eine API ab, z.b. alle 10 min. Schlägt der API Aufruf fehl stoppt mein code (ohne Daten kann ich ja auch nichts verarbeiten)
@ple sagte in async, await mit selector oder schleife????:
also so dann ungefähr?
mja fast, denn jetzt hast du einen try um alle await, also geht einer schief stop der code im catch (wenn das so gewünscht ist alles gut !) Wen man separate die Rückgabe auswerten moechte sollte ein try/catch for jedem await anstatt in einem Block
@ple sagte in async, await mit selector oder schleife????:
Hat einer vielleicht noch ne guten Tip für Schulungen zu Javascript, oder bietet vielleicht einer sowas auch an?
Wir selber nicht wirklich, sind aber gerne bereit fragen zu beantworten und unnterstuetzen sowohl hier als auch im Discord wo wir eine live chat haben.
Allgemein aka ich die Kurse von Udemy sehr empfehlen, die kosten im Angebot oft nur 10-15 euro.Ich kann z.b. "JavaScript: Understanding the Weird Parts" sehr empfehlen, ist ein eye opener wen man aus anderen programmier sprachen kommt, de gibt es glaube ich auch in Deutsch.
Bei fragen einfach melden, oder eventuell discord joinen dan kan man auch bissl live unterstützen
-
@dutchman
Sorry, die Kids haben mich ein wenig in Anspruch genommen, aber ne kleine Pause ist auch mal nicht schlecht um das geschriebene neu zu lesen
Ok, grundsätzlich alles was await ist abfangen mit try und catch.
Müsste man es auch bei einemawait setStateAsync('Daten_lesen.' + Tabelle + '.' + Spaltenname, Daten);
oder ist es in der function setStateAsync bereits mit eingebaut oder geht man davon aus, dass es garantiert beschrieben werden kann.
Zum Thema abbrechen und eine Fehlermeldung ausspucken.
Kann ich meine function Main irgendwie abbrechen, wenn ein error bei irgendein await auftritt? z.B, das die Metadaten nicht geschrieben werden können, weil der SQL nicht erreichbar ist? Dann sollte der Rest auch nicht mehr laufen.Und nochmals herzlichen Dank für eure Unterstützung
Einige Bücher werde ich mir mal zulegen bei Zeiten.
Gruß -
@ple sagte in async, await mit selector oder schleife????:
geht man davon aus, dass es garantiert beschrieben werden kann.
Nein, musst du selbst abfangen.
Kann ich meine function Main irgendwie abbrechen, wenn ein error bei irgendein await auftritt? z.B, das die Metadaten nicht geschrieben werden können, weil der SQL nicht erreichbar ist? Dann sollte der Rest auch nicht mehr laufen.
Ja, try-catch um jedes setStateAsync und im catch die Funktion mit
return
verlassen. (Wäre die Variante wo du am meisten Kontrolle hast).
Ansonsten kannst du auch den ganzen Schreibprozess in ein try-catch packen. Dann wird automatisch ins catch gesprungen, sobald ein Versuch fehlschlägt.