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

时间:2014-11-09 14:25:32

标签: javascript phantomjs

我在使用PhantomJS时遇到了一些问题。我指的是this article。我试图嵌套open()函数,但我没有得到我想要的结果,即打开所有4个网址并打印所有4个console.log

代码:

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

1 个答案:

答案 0 :(得分:2)

完成执行后你必须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();
            });
        });
    });
});
正如Nicolas在博客中所说,PhantomJS是异步的。你太早退出了。