Im folgenden Code versuche ich, mydata an den Rückruf zu übergeben. Dies ist ein Beispielproblem von einem größeren Problem, das ich habe. Ich gehe davon aus, dass dies ein Umfangsproblem ist. Was ist mit meinem Code falsch und / oder was soll ich tun?

var EventEmitter = require('events').EventEmitter;
var myevent      = new EventEmitter();
var mydata       = 'my data!';

function myfunc (data, mydata) {
  console.log(data);
  console.log(mydata);
};

myevent.on('data', function(data, mydata) {myfunc(data,mydata)});

myevent.emit('data', "data!");

Kehrt zurück:

data!
undefined

Ich möchte, dass es zurückkommt:

data!
my data!
1
EhevuTov 5 Okt. 2012 im 23:40

3 Antworten

Beste Antwort

Ich werde eine wilde Vermutung anstellen (da ich mit EventEmitter nicht vertraut bin) und sagen, dass der erste Parameter von emit der Name des Ereignisses ist und die verbleibenden Parameter an den Handler übergeben werden .

Wenn dies der Fall ist, übergeben Sie nichts an den zweiten Rückrufparameter, weshalb er als undefined eingeht. Versuchen Sie dies stattdessen:

myevent.emit('data', "data!", "mydata!");

Hinweis: Ich ignoriere Ihr Shadowing-Problem, da es nicht mit dem Problem zusammenhängt, sondern nur eine schlechte Praxis.

3
jbabey 5 Okt. 2012 im 19:52

Geänderter Code: Sie können auf eine globale Variable zugreifen. von überall müssen Sie es nicht als Parameter übergeben. sogar Sie übergeben einen Parameter. Sie können mit window.mydata auf eine globale Variable zugreifen, da Sie nodejs verwenden. Sie können mit global.mydata auf eine globale Variable zugreifen.

var EventEmitter = require('events').EventEmitter;
var myevent      = new EventEmitter();
var mydata       = 'my data!';

function myfunc (data) {
  console.log(data);
  console.log(mydata);
};

myevent.on('data', myfunc);

myevent.emit('data', "data!");
2
Anoop 5 Okt. 2012 im 20:04

Der Parameter mydata in der Parameterliste des Rückrufs verbirgt die gleichnamige globale Variable.

Da Sie an dieser Position keinen Parameter übergeben haben, lautet der Wert undefined.

Entweder:

  1. Ändern Sie den Namen des Parameters oder
  2. Entfernen Sie den Parameter oder
  3. den erforderlichen Wert übergeben, z. myevent.emit('data', "data!", mydata);

Ps:

myevent.on('data', function(data, mydata) {myfunc(data,mydata)});

Wäre besser einfach geschrieben als:

myevent.on('data', myfunc);
5
Alnitak 5 Okt. 2012 im 19:43