在同步转换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 。
- “callback不是一个函数”Node.Js
- Node.js /asynchronous – 如何避免与asynchronouscallback地狱?
- 在node.js中,如何使用child_process.exec这样一切都可以asynchronous发生?
- async.map不会在nodejs中调用callback
- 如何在Node.js中为非常大(> 1GB)的文件的每一行运行一个asynchronous函数
- 我应该在node.js和Express中链接方法和函数吗?
- 为什么等待不起作用的节点请求模块?
- 在node.js中使用asynchronous瀑布时的“err”参数
- asynchronous如何处理Javascript中的variables?