javascript - Google SignOut 过程中的错误未捕获的错误:nb JS
问题描述
只是为了重构我的代码,我编写了 google SignOut 函数,如下所示
function googleSignOut() {
if (typeof module_google_login == 'undefined') {
return false;
}
gapi.load('auth2', function () {
var gApiAuth = gapi.auth2;
gApiAuth.init().then(doGoogleLogout(gApiAuth));
});
};
function doGoogleLogout(gApiAuth) {
console.log(gApiAuth);
var googleAuth = gApiAuth.getAuthInstance();
googleAuth.signOut().then(function () {
$.ajax({
type: 'POST',
url: '/account/logout/',
success: function () {
auth2.disconnect();
window.location = "/account";
}
});
});
}
但它在控制台中出现这样的错误
Uncaught Error: nb
at tE (cb=gapi.loaded_0:201)
at jF.<anonymous> (cb=gapi.loaded_0:248)
at new _.C (cb=gapi.loaded_0:123)
at jF.BT (cb=gapi.loaded_0:248)
at Ay.Qv.a.<computed> [as signOut] (cb=gapi.loaded_0:227)
at doGoogleLogout (main.js:48)
at main.js:41
at platform.js:18
at Sa (platform.js:10)
at Y (platform.js:18)
但我是这样实现的
function googleSignOut() {
if (typeof module_google_login == 'undefined') {
return false;
}
gapi.load('auth2', function () {
gapi.auth2.init().then(function () {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
$.ajax({
type: 'POST',
url: '/account/logout/',
success: function () {
window.location = "/account";
}
});
});
});
});
};
然后它工作正常,虽然它看起来不那么好。如果有人能告诉我我之前的实现有什么问题以及什么是行不通的。
解决方案
问题出在这条线上
gApiAuth.init().then(doGoogleLogout(gApiAuth));
。
对于 promise 的成功处理程序,您需要传递函数引用而不是直接调用函数。这里doGoogleLogout(gApiAuth)
将在 promise 解决之前被调用。将此更改为gApiAuth.init().then(()=>doGoogleLogout(gApiAuth))
从此链接了解更多信息
推荐阅读
- firebase - 使用 Auth 和 firestore 依赖项获取错误
- reactjs - 将 React 组件类实例传递给子组件以访问父组件的变量和方法是否安全?
- fortran - 英特尔编译器未定义对符号“for_inquire”的引用
- javascript - 为自定义 HTML 元素创建高度和宽度属性
- ffmpeg - FFMPEG - 剪辑视频导致剪辑时间更长
- python - 将 csv 文件转换为 json,浮点值周围没有引号
- javascript - 在 setState 中使用 [object Object] 初始化状态
- javascript - 如何缩小 JS 文件但保留所有车把胡须
- java - Spring data jpa SELECT ... FOR UPDATE Query 不适用于@query
- azure - 从 Azure 导出 PFX,不包括链中的根权限