我有一个代码:
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。
我会感激任何帮助。
答案 0 :(得分:0)
我调用page.open(...)。 phantomJS 加载页面,同时他 继续执行脚本中的下一个函数。
不,它不会立即加载页面。它添加了打开页面到event loop的任务。然后它继续解析并执行脚本。只有当前脚本结束并且当前callstack中的所有函数都完成后,JS才开始处理事件循环中的任务。因此,它找到了打开页面并打开页面的任务。到目前为止,所有console.log
语句都已执行。
页面打开后,会将任务添加到循环中以运行您传递到page.open()
的回调。