同步转换异步进程

时间:2014-06-03 20:57:23

标签: javascript node.js asynchronous

我正在玩javascript和node.js,所以我天真地试图让异步调用同步(我知道fs lib有readFileSync,这只是为了玩)

所以这里是代码,它会循环,直到回调更改标志值,循环应该中断并且流程应该继续,但它会挂起......

var fs = require("fs");

//read a file, just something asynchronous
var readfilesync = function(filename){

  var getout  = false,
      result  = null,
      error   = null;

  fs.readFile(filename, "utf8", function(err, data){
    if (err) {
      error = err;
    }
    else {
      result = data;
    }
    getout = true;
  });
  while (!getout) {
    console.log('---waiting');
  }
  return (error)? error : result;
};

console.log("========== redis.conf: ",
    readfilesync("/var/log/system.log"));

有人可以帮我讲一下这个吗? 问候。

1 个答案:

答案 0 :(得分:3)

while (!getout)正在阻止,因此fs.readFile的回调永远不会执行,getout永远不会改变。

请记住,JS是单线程的。只有在资源可用时才能执行回调,但它们永远不可用,因为while循环永远不会终止。

也许这有助于更好地理解JavaScript的执行模型:MDN - EventLoop