Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将异步进程转换为同步进程_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 将异步进程转换为同步进程

Javascript 将异步进程转换为同步进程,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我在玩javascript和node.js,所以我天真地尝试进行异步调用synchronous(我知道fs lib有readFileSync,这只是为了玩) 下面是代码,它执行循环,直到回调更改标志值,循环应该中断,流应该继续,但它挂起 var fs = require("fs"); //read a file, just something asynchronous var readfilesync = function(filename){ var getout = false,

我在玩javascript和node.js,所以我天真地尝试进行异步调用synchronous(我知道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"));
有人能帮我讲讲这个吗? 当(!getout)被阻塞时,
fs.readFile
的回调永远不会执行,
getout
也永远不会更改

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


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

好的@FelixKling我知道这是阻塞,您能帮助了解更多细节吗?任何可以帮助我改进的全面文章。循环和回调都在同一个线程上运行。这意味着在给定时间只能运行其中一个。只要while循环在迭代,回调就永远不会有机会触发,因为线程被循环完全占用或“阻塞”。