Node+PhantomJS |在page.evaluate之后返回

Node + PhantomJS | Return after page.evaluate

本文关键字:之后 返回 evaluate page Node+PhantomJS      更新时间:2023-09-26

我有一个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作为一个单独的进程运行,这意味着每个通信都是异步完成的。不能return异步计算的结果。简单的解决方案是使用回调函数:

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

并像这样使用:

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

这不会return任何内容。