我有以下代码: -
var express = require('express');
var events = require('events');
var app = express();
var kick = new events.EventEmitter();
app.get('/info', function(req, res) {
console.log('at A');
kick.once('kick', function() {
console.log('at C');
res.send('info');
});
console.log('at B');
});
app.get('/info2', function(req, res) {
res.send('info2');
});
app.get('/kick', function(req, res) {
kick.emit('kick');
res.end();
});
app.listen(8080);
如果我在我的浏览器中输入localhost:8080 / info,我得到的预期输出是: -
at A
at B
如果我然后发出kick事件,我得到预期的输出: -
at A
at B
at C
但是,如果我两次请求信息,则第二个呼叫不会被处理,直到第一个呼叫完成了kick事件。这是为什么?块发生在哪里?
我在第一次获取等待踢的时候请求info2确定。
答案 0 :(得分:0)
当请求发挥作用时,它最终会收到res.send
来完成连接。因此,在您的情况下,如果您需要/info
,它会定义一个从未发生过的事件的回调,因此res.send
未被调用且请求仍然被阻止(更多如等待{未阻止}等待res.send
代码中的trigger('kick')
仅在请求和 a HttpUrlConnection
之后发生。