等待弹出窗口返回的 Javascript 链接

标签 javascript twitter oauth dom-events chaining

当其中一个函数涉及等待弹出窗口时,如何让一系列函数按顺序执行?

在下面的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");
   }
});

关于等待弹出窗口返回的 Javascript 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369442/

相关文章:

node.js - 从passportjs中的OAuth回调中获取状态参数

javascript - CSS 在 mac OS safari 和 chrome 上无法正确加载

java - 使用 Twitter4j 我如何获得特定用户 Collection 的所有推文列表

hadoop - Flume Twitter 流媒体问题

javascript - Bootstrap Twitter typeahead 设置不起作用

Spring OAuth2 ClientId 作为密码授予类型的用户名传入

javascript - 如何在Flash中编写加载 Action ?

javascript - JavaScript 中本地定义的样式和动画

javascript - jQuery 删除模糊上的空格不起作用

OAuth 2.0 : Benefits and use cases — why?