为什么我的response.get在express / node.js中被阻止?

时间:2015-05-08 12:05:18

标签: node.js express blocked

我有以下代码: -

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确定。

1 个答案:

答案 0 :(得分:0)

当请求发挥作用时,它最终会收到res.send来完成连接。因此,在您的情况下,如果您需要/info,它会定义一个从未发生过的事件的回调,因此res.send未被调用且请求仍然被阻止(更多如等待{未阻止}等待res.send代码中的trigger('kick')仅在请求 a HttpUrlConnection之后发生。