Javascript链接等待弹出窗口返回
当一个函数涉及等待一个弹出窗口时,我该如何获得一系列顺序执行的函数?
在下面的authBegin函数中,我弹出一个窗口,它在完成时返回到authBegin函数。
但链接当然不等待。 我怎样才能让它等到窗户回来?
am.authUnlessCurrent().authBegin().collectData();
var authModule=function(){
this.authUnlessCurrent=function(){
alert("checks auth");
};
this.authBegin=function(){
window.oauth_success = function(userInfo) {
popupWin.close();
return this;
}
window.oauth_failure = function() {
popupWin.close();
return true;
}
popupWin = window.open('/auth/twitter');
};
this.collectData=function(){
alert("collect data");
return this;
};
}
您的auth begin方法不会返回任何内容。 如果它不返回任何内容,则无法通过呼叫进行链接。 但是,真正的问题在于,您需要等待异步操作(用户授权弹出窗口中的某些内容)。 因此,您不能链接呼叫,因为链接的呼叫需要同步(阻止)流。 换句话说,在用户响应之前,无法让您的代码阻塞,然后同步收集数据。 你必须使用回调。
我喜欢JS的一件事是能够指定内联回调,这使得它几乎看起来像你正在寻找的链式风格
以下是一个建议,其中包含简化版代码:
/**
* Initialize an authorization request
* @param {Function} callback method to be called when authentication is complete.
* Takes one parameter: {object} userInfo indicating success or null
* if not successful
*/
function authenticate(callback) {
window.oauth_success = function(userInfo) {
popupWin.close();
callback(userInfo);
}
window.oauth_failure = function() {
popupWin.close();
callback(null);
}
var popupWin = window.open('/auth/twitter');
};
}
authenticate(function(userInfo){
if (userInfo) {
console.log("User succesfully authenticated", userInfo);
} else {
console.log("User authentication failed");
}
});
链接地址: http://www.djcxy.com/p/49225.html
上一篇: Javascript chaining to wait for pop up window to return
下一篇: Search engines not able to index asp.net site due to 302 redirects to Error page