2015-12-05 3 views
1

В чем разница между этими кодами?Понимание неблокирующего IO в узле

*** First *

var express = require('express'); 
var app = express(); 

app.post('/', function (req, res) { 

    console.log('Procesando abastecimiento...'); 

    var rawData = ''; 

    req.on('data', function (chunk) { 
     rawData += chunk; 
    }); 

    req.on('end', function(){ 
     console.log('Data recibida: ' + rawData); 
     res.end(); 
    });  
}); 

Второй

var express = require('express'); 
var app = express(); 

app.post('/', function (req, res) { 

    console.log('Procesando abastecimiento...'); 

    var rawData = ''; 

    req.on('data', function (chunk) { 
     rawData += chunk; 
    }); 

    req.on('end', function(){ 
     console.log('Data recibida: ' + rawData);  
    }); 

    res.end(); 
}); 

Если я закрываю соединение (res.end()) внутри обратного вызова мероприятия 'конец', будет клиент ждать, пока все данные считываются ? Я не понимаю разницы, я просто знаю, что мой код быстрее использует второй способ. Можете ли вы объяснить мне, почему?

+0

, если вы вызываете res.end за его пределами, вызывается немедленно, как только приходит запрос на отправку. Вы должны использовать первый код, а не второй. –

ответ

1

В первом примере вы устанавливаете инструкцию res.end(); по запросу end обратного вызова (то есть возникает событие end).

Во втором случае вы вызываете res.end(); сразу же, не ожидая завершения запроса.

Вы можете думать об этом так, как будто инструкция req.on('end', ...) - это функция, которая устанавливает обработчик для события, которое поступит в будущем, но код не выполняется до тех пор, пока событие не будет получено.

Смежные вопросы