使用嵌套的open()函数时,何时退出

When to exit when using nested open() functions?

本文关键字:函数 何时 退出 嵌套 open      更新时间:2023-09-26

我在使用PhantomJS时遇到了一些问题。我指的是这篇文章。我尝试嵌套open()函数,但没有得到我想要的结果,即打开所有4个URL并打印所有4个console.log s。

代码:

var page = require('webpage').create();             //新建一个页面
url1 = "-----";
url2 = "-----";
url3 = "-----";
url4 = "http://-----/";
page.open(url1, function(status) {                  //导航到第一个URL
    console.log('111111111111');
    if (status == "fail") phantom.exit();           //如果发生错误,退出程序
    page.open(url2, function(status) {              //否则在页面加载完成的回调函数中继续导航到第二个URL,依次类推
        console.log('22222222222222');
        if (status == "fail") phantom.exit();
        page.open(url3, function(status) {
            console.log('3333333333333333');
            if (status == "fail") phantom.exit();
            page.open(url4, function(status) {
                console.log('444444444444444');
                if (status == "fail") phantom.exit();
            });
        });
    });
    console.log('close');
    phantom.exit();
});

结果:

$ phantomjs test.js 
111111111111
close

当你执行完它时,你必须exit PhantomJS,而且似乎你在open url4:之后就完成了

page.open(url1, function(status) {
    console.log('111111111111');
    if (status == "fail") phantom.exit();
    page.open(url2, function(status) {
        console.log('22222222222222');
        if (status == "fail") phantom.exit();
        page.open(url3, function(status) {
            console.log('3333333333333333');
            if (status == "fail") phantom.exit();
            page.open(url4, function(status) {
                console.log('444444444444444');
                if (status == "fail") phantom.exit();
                console.log('close');
                phantom.exit();
            });
        });
    });
});

PhantomJS是异步的,正如Nicolas在他的博客中所说。你离开得太早了。