javascript - Node + PhantomJS | page.evaluate后返回

标签 javascript node.js phantomjs

我有一个NodeJS + Phantom项目,我有以下功能:

function isLogged(page) {
    var logged = false;
    page.evaluate(function() {
        return document.querySelector(".login") != null;
    }, function(bl) {
        console.log("1");
        logged = bl;
    });
    console.log("2");
    return logged;
}

但是这个函数在“1”之前打印“2”。我该如何修复它?

最佳答案

您正在使用 Node.js 和 PhantomJS 之间的桥梁。 PhantomJS 作为一个单独的进程运行,这意味着每次通信都是异步完成的。您无法返回异步计算的结果。简单的解决方案是使用回调函数:

function isLogged(page, callback) {
    page.evaluate(function() {
        return !!document.querySelector(".login");
    }, callback);
}

并像这样使用它:

isLogged(page, function(res){
    console.log(res);
});

这不会返回任何内容。

关于javascript - Node + PhantomJS | page.evaluate后返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31767075/

相关文章:

javascript - 使用 PhantomJS 单击基于框架的网站上的某个链接

javascript - GoogleSearch 如何预渲染图像?

Javascript垃圾收集具有相同变量的新对象

node.js - Raspberry + socket.io 在本地网络上工作,但不能在外部网络上工作

node.js - Node js 将架构放在其他文件夹中

node.js - "path"参数必须是字符串类型。接收类型对象 - Angular 7

javascript - 使用提交 <button> 而不是 &lt;input&gt; 按钮

javascript - 由于来自模板的 CSS,单选按钮被禁用

javascript - Vega Charts 抛出类型定义错误

angularjs - Karma : Running test with phantomjs ends-up with TypeError, 而 Chrome 成功