2011-10-31 61 views
0

也许我在复制this问题,但提供的答案可能指的是较旧版本的节点(我使用的是v0.5.10),因为fs.writeSync(1, "Foo\n");本身并不能解决我的问题(输出从一个shell脚本执行脚本时没有得到刷新)和fs.fsyncSync(1);not documented,当我尝试它节点上升例外:Node.js stdout flush

return binding.fsync(fd); 
      ^
Error: UNKNOWN, Operation complete; 

at Object.fsyncSync (fs.js:353:18) 
at Interface.<anonymous> (C:\Dev\Git\org.github.pistacchio.streamcommunication\nodebot.js:36:12) 
at Interface.emit (events.js:67:17) 
at Interface._onLine (readline.js:162:10) 
at Interface._line (readline.js:426:8) 
at Interface._ttyWrite (readline.js:603:14) 
at ReadStream.<anonymous> (readline.js:82:12) 
at ReadStream.emit (events.js:88:20) 
at ReadStream._emitKey (tty.js:309:10) 
at ReadStream.onData (tty.js:66:12) 
+0

它不必被阻塞,一个on-flush回调就足够了,对吧? – thejh

+0

我正在写一个控制台脚本,所以是的,它应该被阻止。为了我的目的,所有的异步调用都不是一件好事,而是一个问题。 – pistacchio

回答

2

你希望它会阻止,但我想应该streamlinejs为你工作:

var done = process.stdout.write(str); 
if (!done) { 
    // this effectively means "wait for this 
    // event to fire", but it doesn't block everything 
    process.stdout.on('drain', _) 
} 
doSome(otherStuff) 

您可以粘贴此代码here以查看在您调用它时编译的内容。此外,您必须安装简化npm install streamline -g,以将您的代码放在名称以_.js结尾的文件中,并使用node-streamline filename_运行您的代码。