gpt4 book ai didi

javascript - Node js中 "switch case"的执行顺序是什么

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:14 25 4
gpt4 key购买 nike

我是node.js新手,在运行一个简单的示例时遇到了一个奇怪的问题。

var http = require("http");
var url = require('url');
var fs = require('fs');

var server = http.createServer(function(request, response){
console.log('Connection');
var path = url.parse(request.url).pathname;
console.log(1);
switch(path){
case '/':
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('hello world');
break;
case '/socket.html':
console.log(2);
fs.readFile(__dirname + path, function(error, data){
if (error){
response.writeHead(404);
response.write("opps this doesn't exist - 404");
console.log(3);
}
else{
response.writeHead(200, {"Content-Type": "text/html"});
response.write(data, "utf8");
console.log(4);
}
});
break;
default:
response.writeHead(404);
response.write("opps this doesn't exist - 404");
break;
}
console.log(5);
response.end();
});

server.listen(8001);

当我访问时

http://localhost:8001/socket.html

后端日志输出如下:

    Connection
1
2
5
4
Connection
1
5

在浏览器中,没有任何输出,html的源为空。注意日志,我想这可能是在日志打印“5”之后、日志打印“4”之前响应已经关闭。

我不明白为什么日志序列不是“1245”,有人可以向我解释一下吗?

最佳答案

fs.readFile 方法是异步。当您调用它时,执行会立即在其后继续执行(在 break 语句处),然后继续执行 console.log(5)response.end() 调用。

因此,response.end()fs.readFile 回调有机会执行之前被调用。您需要将 response.end() 调用移至回调内部

关于javascript - Node js中 "switch case"的执行顺序是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com