2013-06-30 2 views
0

Я новичок в node.js У меня есть некоторые проблемы с setTimeout(function(){.....},time); thingo. Это прекрасно работает, когда я свернуться локальный сервер, но не как ожидалось в Google Chrome (я не проверял другие браузеры)node.js и setTimeout и google chrome

Мой код:

/* simple node.js createserver */ 

var http = require('http'); 

http.createServer(function (request, response) { 
    response.writeHead(200); 
    response.write('Somthing\r\n'); 

    setTimeout(function(){ 
     response.end('\n This came out after 5 seconds :) '); 
    }, 5000); 
    response.write('Hello World\n'); 
}).listen(8124); 



console.log('Server running at http://127.0.0.1:8124/'); 

Когда я curl 127.0.0.1:8124 все работает, как ожидалось. Но когда я указываю, что в браузере он некоторое время остается бездействующим (что я думаю, это 5 секунд) и отображает все содержимое сразу? Является ли это ожидаемым поведением node.js или я что-то упускаю? Может ли браузер делать что-то вроде завитка (т. Е. Сначала печатать две строки и ждать 5 секунд и печатать другую строку)?

+1

возможный дубликат [Node Js проблемы с Response.Write] (http://stackoverflow.com/questions/6068820/node-js-problems-with-response-write) – Dogbert

+1

[возможное решение ] (http://stackoverflow.com/a/16999405/149260) заключается в том, чтобы добавить 'Transfer-Encoding: chunked' – mak

+0

, что не решило его :( – cipher

ответ

1

Попробуйте

http.createServer(function (request, response) 

    response.setHeader('Content-Type', 'text/html; charset=UTF-8'); 
    response.writeHead(200); 
    response.write('Somthing\r\n'); 

    setTimeout(function(){ 
    response.end('\n This came out after 5 seconds :) '); 
    }, 5000); 

    response.write('Hello World\n'); 
    //No point writing Hello World here as it is written immediately 

}).listen(8124); 
+0

Спасибо. последний Hello World был только из моего предыдущего кода :) (нет смысла писать это) – cipher

+0

И можете ли вы сказать, что только что произошло для него сейчас? – cipher

+0

Добавление текста/html; charset = UTF-8', так как Content-Type заработал. Он сообщает браузерам, в какой кодировке находится страница. Браузеры могут не получать Content-Type, если они не проходят через весь контент. Браузеры могут постепенно загружать страницу. Просто для этого требуется, чтобы он знал некоторые метаданные страницы заранее. – user568109

1

Он expected-- браузер не предназначен для отображения страницы, пока он не закончит загрузку (я считаю, что может быть сделано исключение для больших кусков, но по большей части это будет правдой)