2015-07-30 11 views
5

Qual è il vantaggio di questo modo di leggere i dati fuori un flusso leggibile come ad esempio una richiesta:NodeJS - Perché perdere tempo con ciclo while nella lettura dei dati off flusso leggibili all'interno del .on ('leggibile') evento

request.on('readable', function(){ 
    var chunk = null; 
    while (null !== (chunk = request.read())) { 
     response.write(chunk); 
    }; 
}); 

vs in questo modo senza un ciclo while all'interno? Dal momento che 'leggibile' continuerà a sparare perché preoccuparsi del ciclo while?

request.on('readable', function(){ 
    var chunk = request.read(); 
    if(chunk !== null){ 
     response.write(chunk);   
    } 
}); 
+0

Perché utilizza gli eventi per dirti quando i dati sono pronti. L'utilizzo di un ciclo while bloccherà tutti gli I/O per l'intero processo fino al completamento di una richiesta. request.on ('data') lo supera. – eshortie

+0

Quindi, perché non ignoro il ciclo while – HelpMeStackOverflowMyOnlyHope

+0

Perché, come ho detto, blocca tutte le altre richieste di essere pubblicate fino al completamento, il che significa che il servizio sarà lento. Inoltre, non penso che il codice postato sia valido, vero? – eshortie

risposta

2

Come per la documentazione API:

var req = http.request(options, function(res) { 
    console.log('STATUS: ' + res.statusCode); 
    console.log('HEADERS: ' + JSON.stringify(res.headers)); 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
    console.log('BODY: ' + chunk); 
    }); 
}); 

Utilizzando la res.on evento ('Dati') si ottiene i dati quando è pronto. Ciò consentirà al tuo programma di spostarsi e fare altre cose fino a quando il prossimo pezzo di dati è pronto per essere elaborato (ricorda che HTTP è su TCP che arriva in blocchi).

L'utilizzo del codice riportato di seguito potrebbe funzionare, ma perché farlo quando si mangia inutilmente cicli della CPU e si blocca l'esecuzione di altri codici (ricorda che il codice JavaScript Node.js è a thread singolo). L'utilizzo degli eventi è di gran lunga migliore poiché consente al tuo JavaScript di funzionare ed elaborare input/output senza bloccare il processo inutilmente.

request.on('readable', function(){ 
    var chunk = null; 
    while (null !== (chunk = request.read())) { 
     response.write(chunk); 
    }; 
});