node.js - NodejS + PhantomJS 警告 : exit() was called before waiting for commands to finish. 确保您没有过早调用 exit()

标签 node.js phantomjs

尝试将 PhantomJS 与 NodeJS 结合使用来检查网站加载时间。

但是之后收到了这个消息

phantom_instance.exit();

已经尝试在 Promise 返回后运行这一行

这是我的代码:

function timer(url) {
return new Promise(function(resolve, reject) {
    let phantom_instance = null;
    let sitepage = null;
    let start_time = null;
    let end_time = null;
    let interval_obj = null;
    let loading_time = 0;
    phantom.create()
        .then(function(instance) {
            phantom_instance = instance;
            return phantom_instance.createPage();
        })
        .then(function(page) {
            sitepage = page;
            page.property('viewportSize', {
                width: 1280,
                height: 1024
            })
            start_time = Date.now();
            return page.open(url);
        })
        .then(function(status) {
            return new Promise(function(resolve, reject) {
                if (status == 'success') {
                    interval_obj = setInterval(function() {
                        //tell the browser to return document.readyStatue
                        sitepage.evaluate(function() {
                            return document.readyState;
                        })
                        .then(function(ready_state) {
                            if (ready_state == "complete") {
                                end_time = Date.now();
                                sitepage.close();
                                clearInterval(interval_obj);
                                loading_time = end_time - start_time;
                                return resolve(loading_time);
                            } else {
                                console.log(ready_state);
                            }
                        })
                    }, 1000);
                } else {
                    //phantom_instance.exit();
                    return reject(status);
                }
            });
        })
        .then(function(loading_time) {
            console.log("[Speed Tester] Completed in : " + loading_time);
            phantom_instance.exit();
            return resolve({time:loading_time});
        })
});
}

有什么想法吗?

谢谢。

最佳答案

我可以通过执行 var promise = page.close(); 来避免提到的警告并在执行 phantom_instance.exit() 之前等待 promise 解决。

关于node.js - NodejS + PhantomJS 警告 : exit() was called before waiting for commands to finish. 确保您没有过早调用 exit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44425811/

相关文章:

node.js - PhantomJS 无法正确提供 JS 和 CSS 文件

javascript - CasperJS waitForSelector 工作但 querySelector null

javascript - 每当远程主机关闭套接字连接时,Node.js 应用程序就会崩溃

node.js - paypal rest sdk如何识别哪个卡号属于哪个卡种?

javascript - 如何在 PhantomJS 中将 XML GET 响应保存到文件

javascript - 如何使用 casperJS 简洁地检查网页资源是否存在 404?

javascript - 无法使 PhantomJS 示例正常工作

node.js - 如何从云函数调用同步子函数

node.js - AWS Elastic Beanstalk Node.js 日志没有时间戳

css - 在nodejs中将css动画保存为jpeg/png