Возьмите этот код, где f
представляет собой поток, который имеет событие «тело», которое вызывает слушатель с m
- что сам по себе является поток излучающих событий:Вызов .on() перед .emit() в эмитенте события - есть ли проблема с синхронизацией?
f.on('message', function(m) {
m.on('body', function(stream, info) {
var b = '';
stream.on('data', function(d) {
b += d;
});
stream.on('end', function() {
if (/^header/i.test(info.which))
msg.header = Imap.parseHeader(b);
else
msg.body = b;
});
});
m.on('attributes', function(attrs) {
msg.attrs = attrs;
msg.contentType = partID[1];
});
});
f.on('end', function() {
if (hadErr)
return;
cb(undefined, msg);
});
Бэкэнда излучает сообщение» ', передав ему объект m
. Затем код прослушивает события body
и attributes
. Все это прямолинейно, за исключением того, что мой маленький мозг переживает кризис (я не привык к потокам). Особенно: как происходит бэкэнд из объектов f
и m
, чтобы гарантировать, что события действительно вызывают в нужное время?
В частности:
- Как
f
должны быть закодированы, в общих чертах, для того, чтобы убедиться, чтоm
м не выделяет доm.on('body', function(stream, info) {
называется? - Нужно ли добавлять слушателя с помощью() до Событие испускается, чтобы его можно было поймать?
- Если да, то это означает, что
f
иm
будут излучать события после код здесь прописал? - Если бэкенд должен гарантировать, что
b.emit('end')
называется после m.emit («конец»), как в том, что даже должно произойти на самом деле, по-прежнему гарантирует, чтоon()
называетсяbefore
любое из событий испускаются?
OK Я 100% смущен по этому вопросу. Я, очевидно, пропущу что-то основное и решающее, и я даже не могу задавать правильные вопросы из-за этого ...! (Извините).
Спасибо, Брэд! Понимая все это ... Я добавил вопрос! Я думаю, что я сужу, где мое замешательство! Вопрос: «Как будет кодироваться в общих чертах, чтобы удостовериться, что mm не испускается до тех пор, пока m.on ('body', function (stream, info) {не вызван?' (Но, пожалуйста, обновите свой ответ, а не ответьте здесь, я хочу принять ваш ответ в качестве ответа!) – Merc