Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

1

31.03.2018, 19:22

Variablen als zusätzliches Argument übergeben (NodeJs / Js)

Hallo,
in NodeJs registriere ich eine größere Anzahl von Events innerhalb einer Schleife. Dabei heißt jedes Event Modul wie das Event, damit sich folgendes ergibt:

Quellcode

1
2
3
    client.on(eventName, function () { // ein neues Event registrieren
        require('./events/' + eventName).apply(client, arguments);
    });


Durch diese Schreibweise ist es möglich, dass man nicht für jedes Event die passenden Parameter angeben kann, sondern jedes Event sich seine Informationen aus den arguments ziehen kann. Beispiel Event Module wären

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module.exports = (person) => {
    // ...
};

module.exports = (numberA, numberB) => {
    // ...
};

module.exports = () => {
    // ...
};

module.exports = (dataObject, numberArray) => {
    // ...
};


Das funktioniert auch problemlos. Ich möchte aber gerne innerhalb des Events noch das Objekt "client" mitgeben. Kann ich das client objekt beim Registrieren der Events irgendwie an die arguments anhängen?

Versuche ich auf den client im Event zuzugreifen, ist dieser logischerweise undefined, da er ja standardmäßig vom event nicht erwartet wird.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

31.03.2018, 19:49

Dynamisches Require... gleich 5€ in die Code-Smell-Kasse.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

3

31.03.2018, 20:57

was genau soll mir das jetzt sagen =? Anstatt 43x

client.on

zu schreiben lese ich das Verzeichnis aus und registriere die Events über eine Schleife.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

31.03.2018, 21:37

Ich sagte nichts über 43x client.on. Ich sagte was über dynamisches Require.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

5

31.03.2018, 21:41

aber wie sollte man es anders machen, innerhalb einer Schleife?

Eigentlich würde ich aber gerne erstmal das Hauptthema besprechen, falls möglich

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Garzec« (31.03.2018, 23:49)


Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

6

01.04.2018, 11:55

Ich habe es nun selbst gelöst bekommen,

Quellcode

1
2
3
4
5
6
7
8
module.exports = (client) => {
    fs.readdirSync('./events').forEach((currentFile) => {
        var eventFunction = require(`./events/${currentFile}`);
        var eventName = path.basename(currentFile, '.js');

        client.on(eventName, (...args) => eventFunction.run(client, ...args));
    });
}


mit der unteren Schreibweise kann ich vor den Arguments noch den Client anhängen.

Werbeanzeige