【发布时间】:2015-04-28 06:03:30
【问题描述】:
我正在使用带有 AngularJS 的 cloud enpoints 演示,并且在加载 client.js 后,我使用他们建议的运行授权的方法遇到了无限循环。这是建议的方法。
首先,在所有其他脚本标签之后(对于 Angular 和其他 JS 文件,我正在这样做):
<script>
function init() {
window.init();
}
</script>
<script src="https://apis.google.com/js/client.js?onload=init"></script>
然后,在控制器中,我像这样处理窗口初始化:
$window.init = function () {
// Loads the OAuth and helloworld APIs asynchronously, and triggers login
// when they have completed.
var apisToLoad;
var callback = function () {
if (--apisToLoad == 0) {
googleAPI.signin(true,
googleAPI.userAuthed);
appContext.appReady = true;
alert('loaded');
}
}
apisToLoad = 2; // must match number of calls to gapi.client.load()
gapi.client.load('helloworld', 'v1', callback, googleAPI.apiRoot);
gapi.client.load('oauth2', 'v2', callback);
};
我认为我发现这里存在竞争条件,其中 $window.init 没有足够早地设置,所以我最终得到以下消息:
未捕获的 RangeError:超出最大调用堆栈大小
这是因为“window.init()”只是回调了init()函数,超出了栈。
关于如何更好地处理这个问题有什么建议吗?谢谢。
【问题讨论】:
标签: javascript angularjs google-app-engine