为了更好地理解phantom.exit()

时间:2017-05-13 14:08:24

标签: javascript phantomjs

我有一个代码:

var page = require('webpage').create();
page.open('http://phantomjs.org', function (status) {
    console.log('before IF');
    if (status !== 'success') {
        console.log('FAIL to load the address');
        phantom.exit();
    }
    console.log('LOADED');
    phantom.exit();
});

console.log(function(){
    return 'Im in function1';
}());
console.log(function(){
    return 'Im in function2';
}());
console.log(function(){
    return 'Im in function3';
}());

当我运行它时,我得到下一个输出:

Im in function 
Im in function1 
Im in function2 
Im in function3 
before IF 
LOADED

为什么会这样?我调用exit()函数,它应该关闭脚本(或者我错过了什么?)。 这是来自官方幻影医学博士:

  

以指定的返回值退出程序。如果没有返回值   如果指定,则设置为0。

我会感激任何帮助。

1 个答案:

答案 0 :(得分:0)

  

我调用page.open(...)。 phantomJS 加载页面,同时他   继续执行脚本中的下一个函数。

不,它不会立即加载页面。它添加了打开页面event loop的任务。然后它继续解析并执行脚本。只有当前脚本结束并且当前callstack中的所有函数都完成后,JS才开始处理事件循环中的任务。因此,它找到了打开页面并打开页面的任务。到目前为止,所有console.log语句都已执行。

页面打开后,会将任务添加到循环中以运行您传递到page.open()的回调。