Jump to content

Konvertierung von JavaScript auf Typescript, fragen zum JS code


Recommended Posts

Hallo, wie im Titel schon gesehen, hab ich begonnen mir die JSlib sauber ins TypeScript umzuschreiben.

Im Javascript Code gibt es viele Ungereimtheiten, vieles lässt sich durch Beispiele lösen.

Frage nun, ich sehe gerade im Quellcode das "device" benutzt wird, obwohl es nirgends übergeben wird. Ist das ein Fehler oder woher kommt dieses Objekt?

BrickletRS485, Zeile 1607

this.modbusSlaveAnswerReadCoilsRequest = function(requestID, coils, returnCallback, errorCallback) {
		/*
		In Modbus slave mode this function can be used to answer a master request to
		read coils.
		
		* Request ID: Request ID of the corresponding request that is being answered.
		* Coils: Data that is to be sent to the Modbus master for the corresponding request.
		
		This function must be called from the :cb:`Modbus Slave Read Coils Request` callback
		with the Request ID as provided by the argument of the callback.
		*/

		var coilsLength = 0;
		var coilsChunkData = [];
		var coilsChunkOffset = 0;
		var streamStateObject = this.streamStateObjects[25];

		if (coils.length > 65535) {
			if (errorCallback !== null){
				errorCallback(IPConnection.ERROR_INVALID_PARAMETER);
			}

			this.resetStreamStateObject(streamStateObject);

			if (streamStateObject['responseProperties']['callQueue'].length > 0) {
				streamStateObject['responseProperties']['callQueue'].shift()(device); // <-- wo kommt es her?
			}

			return;
		}

 

Link zu diesem Kommentar
Share on other sites

Das ist in der Tat ein Fehler, danke für den Hinweis!

Die Fehlerbehandlung, die das streamStateObject zurücksetzt usw. gibt es an mehreren Stellen, alle außer dieser sind aber in Hilfsfunktionen, die device als Parameter übergeben bekommen. Das ist laut git blame seit 2017 niemanden aufgefallen.

Ich habe das im Generator gefixt: https://github.com/Tinkerforge/generators/commit/fdcc67f1b8f1f210a7aa0d6944f633cab6a9318d und dir neu generierte Bindings angehangen.

On 7/29/2023 at 11:22 AM, stefanwe said:

Hallo, wie im Titel schon gesehen, hab ich begonnen mir die JSlib sauber ins TypeScript umzuschreiben.

Versuchst du auch die Interna zu typisieren, oder nur das Interface nach außen? Eventuell könnten wir das auch generieren. Das für 150 Geräte von Hand zu schreiben stelle ich mir anstrengend vor ;)

tinkerforge_javascript_bindings_2_1_34.zip

Link zu diesem Kommentar
Share on other sites

Hallo rtrbt,

ich arbeite gerade an den Bricks die ich benutze. 
Hier ist mein repo: https://github.com/stefanwerfling/tfe

In der Tat eine Menge Arbeit. Durch ESLint stelle ich auch if/else`s um. Die Evals hab ich auch entfernt.
 

Knackpunkt ist ESM, ich konnte einfach die JSLib nicht laden für mein Projekt.
Meine Idee ist noch später Objekte als Zusatz zu schreiben die mit promis die callback daten dann liefern. Die Original-API soll erhalten bleiben, damit die Dokumentation stimmt.

Über alle Typen von den Variablen bin ich mir aber noch nicht bewusst. Das Beste ist, wenn ich alle "any" typen aufklären kann.

:) 

Link zu diesem Kommentar
Share on other sites

Stimmt, die Variable wird bei Stream-Funktionen in beide Richtungen generiert, aber nur bei Streams vom Bricklet zum PC verwendet. Gefixt: https://github.com/Tinkerforge/generators/commit/aaf854e9

On 7/31/2023 at 1:04 PM, stefanwe said:

In der Tat eine Menge Arbeit. Durch ESLint stelle ich auch if/else`s um. Die Evals hab ich auch entfernt.
 

Knackpunkt ist ESM, ich konnte einfach die JSLib nicht laden für mein Projekt.
Meine Idee ist noch später Objekte als Zusatz zu schreiben die mit promis die callback daten dann liefern. Die Original-API soll erhalten bleiben, damit die Dokumentation stimmt.

Das sind alles gute Punkte. Muss ich mit meinem Kollegen mal besprechen ob und wenn ja wie viel davon wir übernehmen können. Wir melden uns dazu nochmal ;)

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...