Node + PhantomJS |在页面后返回。评估

时间:2015-08-01 23:09:39

标签: 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;
}

但是这个功能会打印" 2"之前" 1"。我该如何解决?

1 个答案:

答案 0 :(得分:0)

您正在使用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任何事情。