在结束

时间:2017-06-16 11:19:59

标签: node.js

为什么在这个例子中根本没有调用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){}”。然后它被调用。

3 个答案:

答案 0 :(得分:0)

你确实陷入了while(d==0){},因为你正在使用同步

制作异步代码

异步代码在事件循环中触发,因此应用程序的流程将使用同步代码,该代码将触发while循环并开始迭代。

答案 1 :(得分:0)

你的过程陷入了无休止的循环。

在回调中用console.log替换你的d = 1("做到了!"),并摆脱了while循环。

(即返回响应后要运行的所有内容,应该放入回调函数中)

答案 2 :(得分:0)

问题是你的主线程正在挨饿,传递给请求的回调将永远不会被执行,因为主流将永远不会完成执行,我建议你研究一下{{3} } node.js。

这个while循环通过运行使事件循环变得饥饿 无限地,贪婪地检查并重新检查一个永远不会有机会的值 要改变,因为事件循环永远不会有机会安排你的请求回调 执行。