如何使Phantomjs中的console.log()同步运行?

时间:2014-04-04 20:12:09

标签: javascript asynchronous phantomjs

据我了解,phantomjs控制台是异步的。这意味着此代码将显示损坏的输出:

console.log(very_long_text);
phantom.exit(0);

只有部分very_long_text可见。由于console.log()的异步性质,它的结尾将会丢失。

解决方法是什么?我需要查看整个very_long_text

也许这个讨论是相关的:is node.js' console.log asynchronous?

PS。这是我现在能做的最好的事情,但它非常难看:

console.log(very_long_text);
setTimeout(function() { phantom.exit(0); }, 100);

1 个答案:

答案 0 :(得分:2)

您确定console.log异步运行吗?

我可以在没有任何截断的情况下向控制台写入5MB。您可以使用系统模块尝试另一个重载,如下例所示:

require('system').stdout.write(very_long_text);
phantom.exit(0);

因此console.log是同步的,但可以在异步代码内运行(例如回调)。因此,在使用它时必须非常小心,尤其是位于phantom.exit的位置。

当你使用console.log时,我认为某事会产生一个phantomjs实例。像Node.js这样的技术在内部使用行/内存缓冲区:因此,如果您的进程突然结束(未处理的异常),则缓冲输出完全有可能永远不会到达屏幕;如果超出stdout或stderr上允许的数据量,也可以杀死子进程(maxBuffer here

最后,如果您想要撰写大量内容,console.log可能不是最佳解决方案。