在同步转换asynchronous进程

我正在玩javascript和node.js,所以我试着做一个asynchronous调用同步(我知道FS的lib有readFileSync,这只是玩)

所以这里的代码,它做了一个循环,直到callback改变标志值,循环应该中断,stream程应该继续,但它挂起…

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")); 

有人能帮我做这个讲座吗? 问候。

while (!getout)被阻塞,所以fs.readFile的callback从不执行, fs.readFile也不会改变。

请记住,JS是单线程的。 只有资源可用时才能执行callback,但由于while循环永远不会终止,所以它们永远不可用。

也许这有助于更好地理解JavaScript的执行模式: MDN – EventLoop 。