为什么在这个例子中根本没有调用Request回调? 输出结果如下:
here
now here
“做到了!”或者回调中的任何日志命令都不会被调用。
var request = require('request');
d=0;
console.log("here");
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
d=1;
});
console.log("now here");
while(d==0){}
console.log("did it!");
如果我删除“while(d == 0){}”。然后它被调用。
答案 0 :(得分:0)
你确实陷入了while(d==0){}
,因为你正在使用同步
异步代码在事件循环中触发,因此应用程序的流程将使用同步代码,该代码将触发while
循环并开始迭代。
答案 1 :(得分:0)
你的过程陷入了无休止的循环。
在回调中用console.log替换你的d = 1("做到了!"),并摆脱了while循环。
(即返回响应后要运行的所有内容,应该放入回调函数中)
答案 2 :(得分:0)
问题是你的主线程正在挨饿,传递给请求的回调将永远不会被执行,因为主流将永远不会完成执行,我建议你研究一下{{3} } node.js。
这个while循环通过运行使事件循环变得饥饿 无限地,贪婪地检查并重新检查一个永远不会有机会的值 要改变,因为事件循环永远不会有机会安排你的请求回调 执行。