javascript - 为什么这个回调会被多次触发?

标签 javascript google-api

我正在将 Google+ JS API 与我的网站集成,但遇到了一个奇怪的问题。当按下登录按钮时,我让它调用以下函数:

function googlePlusLogin() {
    console.log("inside googlePlusLogin()");

    gapi.auth.signIn({
        'clientid' : '[id]',
        'cookiepolicy' : 'single_host_origin',
        'scope' : 'profile email',
        'callback' : function() {console.log('test');}
    });
}

第一次点击按钮时,控制台输出是:

inside googlePlusLogin()
test
正如预期的那样。但是,每次我单击按钮(触发上述函数)时,test 都会打印出增量。因此,例如,第二次单击按钮时,输出为:

inside googlePlusLogin()
test
test

第三次单击按钮时,输出为:

inside googlePlusLogin()
test
test
test

等等..

是什么导致了这种行为?

注意:我将其标记为 JavaScript 因为我认为这可能是我不理解的基本 JS 概念。

最佳答案

相当老了,但我遇到了同样的问题,所以供将来引用:

似乎每次调用gapi.auth.signIn时,“回调”函数都会添加到某些回调列表中。因此,仅在第一次调用 gapi.auth.signIn 时设置回调参数,即类似

function googlePlusLogin() {
  console.log("inside googlePlusLogin()");

  if(window.__callback_initialized) {
    gapi.auth.signIn({
      'clientid' : '[id]',
      'cookiepolicy' : 'single_host_origin',
      'scope' : 'profile email'
    });
  } else {
    gapi.auth.signIn({
      'clientid' : '[id]',
      'cookiepolicy' : 'single_host_origin',
      'scope' : 'profile email',
      'callback' : function() {console.log('test');}
    });
    window.__callback_initialized = true;
  }
}

以 DRY 违规为模即可。

关于javascript - 为什么这个回调会被多次触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23944836/

相关文章:

ios - Google 数据 API - 访问未配置错误

youtube - 如何通过Google API开发人员获取YouTube视频地理信息?

java - Google OAuth 返回 invalid_grant token 类型不正确

google-api - Google Analytics API "ga:day"维度和超过 1 个月的数据返回聚合而不是绝对值

javascript - 将日期/时间字符串转换为日期对象

javascript - 如何使用 select 过滤 Google Maps API v.3 中 json 数据中的两个属性?

javascript - 如何将 html UTI 符号快捷方式(如™)与 angularjs ng-repeat 一起使用?

google-chrome - 带有 '403: Daily Limit Exceeded' 的日历 API 响应 - Google Chrome 扩展

JavaScript 检测附加文件输入的更改

javascript - 当消息队列变空 -> 非空时,JavaScript 如何收到通知?