为什么 console.log() 被调用两次而不是一次
Why console.log() is called two times instead of one?
我有这个简单的节点服务器:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World'n');
fun();
}).listen(9999, '127.0.0.1');
function fun () {
setTimeout(function(){
fun();
console.log('fun');
}, 3000);
}
console.log('Server running at 127.0.0.1:9999');
但是打开 127.0.0.1:9999 "乐趣"每 3 秒出现两次,而不仅仅是一次。为什么?
解决:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World'n');
}).listen(9998, '127.0.0.1');
fun();
function fun() {
setTimeout(function(){
fun();
console.log('fun');
}, 3000);
}
现在,"有趣"每三秒出现一次。
您最初从 http 服务器的回调中调用fun()
。也就是说,每次 http 服务器处理 http 请求时,它都会再次调用fun()
。因此,在处理了两个http请求后,将有两个单独的有趣序列,您应该每三秒在控制台中看到两次"fun"。在三次请求后,您应该每三秒在控制台中看到三次"有趣"。在 x 请求后,您应该每三秒在控制台中看到 x 次"有趣"。
因为你每 3 秒调用一次函数"fun",所以它在 setTimeout 回调中调用自身。
谜团已解开。
http.createServer(function (req, res) {
console.log(req.url); //Printing the requested URL
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('ello World'n');
fun();
}).listen(9999, '127.0.0.1');
当请求进来时,我打印了URL,结果发现每个人工请求都有两个HTTP请求。这些是请求的网址。
/
/favicon.ico
您可以在此处阅读有关favicon
的信息。 因此,两个请求都将计时器设置为 3 秒。这就是为什么你看到fun
被打印两次。
相关文章:
- 一次点击,两次'单击'事件已启动
- ng在一页中包含两次相同的部分页面
- 变量递增两次而不是一次
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- JQuery定位:我可以滚动到正确的位置一次,但不能滚动两次
- JS函数只需点击一次即可触发两次
- Gulp任务似乎运行了两次,而不是一次
- 在javascript中,如何将相同的对象两次推送到一个数组中,并进行一些修改而不覆盖数组
- 滚动时加载更多 滚动速度时一次工作两次
- 一次两个对象的 JQuery 淡入淡出循环
- 一次两个滑动图像
- 在AngularJS中,一次进行两次调用是一种可接受的方法
- Chrome 确实会加载一次视频文件,但不会加载两次
- 如何修复有时加载两次、一次或根本不加载的 Facebook JSDK
- 有没有一种不那么黑客的方法可以防止我的 on('click') 触发两次
- 为什么 console.log() 被调用两次而不是一次
- 向同一按钮添加两次单击事件只能工作一次
- 如何设置相同的索引两次(一次在每个循环内,另一次在循环外部)
- 我的 JSON 数据使用 AJAX 加载了两次,它只应该在单击时加载一次
- jQuery每次重复上一项两次