【发布时间】:2015-03-06 16:20:25
【问题描述】:
我正在尝试将“Q”承诺库与 PhantomJS 一起使用,但下面的代码不起作用。
app.evaluate_page=function(page){
var deferred = q.defer();
console.log("Before the page evaluation");
page.evaluate(function(){
deferred.resolve(page);
});
return deferred.promise;
};
以下是错误
Before the page evaluation
ReferenceError: Can't find variable: deferred
phantomjs://webpage.evaluate():2
phantomjs://webpage.evaluate():3
phantomjs://webpage.evaluate():3
看起来它无法找到在外部范围中定义的延迟变量,这很奇怪。相同类型的代码适用于其他具有回调的方法,如 page.open 方法。
下面的代码只是按预期工作,不知道为什么上面的代码不能。
app.openPage = function(options){
var deferred = q.defer();
page.open(options.url,function(status){
if(status!=="success"){
deferred.reject(new Error("Page could not be loaded at "+ options.url ));
}
else {
deferred.resolve(page);
}
});
return deferred.promise;
};
【问题讨论】:
-
你想达到什么目的?
page.evaluate()是同步的。 -
是的。我希望 page.evaluate 是同步的。
-
是的,那你为什么需要
q? -
哦,好的。我不确定。让我同步使用它,看看它是如何工作的。谢谢,
-
page.open 也是同步的吗?
标签: javascript phantomjs q