未捕获的类型错误:googleAuth.then 不是函数
Posted
技术标签:
【中文标题】未捕获的类型错误:googleAuth.then 不是函数【英文标题】:Uncaught TypeError: googleAuth.then is not a function 【发布时间】:2018-08-10 04:30:01 【问题描述】:我已经使用 Google 身份验证运行了这个 Angular 5 应用程序一段时间,然后突然出现了这个错误(在 prod 和 dev 上)。登录成功,我得到了一个 GoogleAuth 对象(我可以获取用户详细信息),但随后出现此错误:
Uncaught TypeError: googleAuth.then is not a function
这是代码块。 _googleAuth 是一个调用 init 的服务。
this._googleAuth.getAuth()
.subscribe(googleAuth =>
// TODO
console.log('user signedIn: ', googleAuth.isSignedIn.get()); // this returns true
const self = this;
googleAuth.then(function() // error occurs here
if (googleAuth.isSignedIn.get())
...
...
我已将类型更新为:
"@types/gapi": "0.0.35", "@types/gapi.auth2": "0.0.47",
这是 getAuth 函数(似乎仍然有效):
public getAuth(): Observable<GoogleAuth>
if (!this.GoogleAuth)
return this.googleApi.onLoad().mergeMap(() => this.loadGapiAuth());
return Observable.of(this.GoogleAuth);
我已经检查了类型,并在那里定义了 GoogleAuth.then。为什么我可以获取 GoogleAuth 对象但不能调用 .then?
GoogleAuth.then 的 Google 文档在这里:https://developers.google.com/identity/sign-in/web/reference#googleauththenoninit-onerror
【问题讨论】:
GoogleAuth
是promise
?
@connexo 在类型化中,GoogleAuth 被定义为单例类。 getAuth() 将 GoogleAuth 对象作为可观察对象返回
gapi.auth2.init(params)
初始化 GoogleAuth 对象。您必须在调用 gapi.auth2.GoogleAuth 的方法之前调用此方法。 developers.google.com/identity/sign-in/web/…
@connexo 是的,我在问题中提到了这一点。 getAuth() 调用 init(在 loadGapiAuth() 中),它似乎可以工作,因为我得到了用户详细信息和登录状态。但是, .then 函数(也出现在智能感知中)正在引发错误。很奇怪。
getAuth
的代码看起来不像 javascript。
【参考方案1】:
我仍然不清楚为什么现在这会变成一个错误,但我找到了一个可能的解决方案。 TypeScript 包装服务已经在 gapi.auth2.init 之后调用了 .then,所以看起来我调用了它两次。我已经删除了该检查,它似乎正在工作。我仍然需要运行我的测试套件,但到目前为止它看起来很有希望。
【讨论】:
以上是关于未捕获的类型错误:googleAuth.then 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
错误:`未捕获(承诺中)类型错误:无法读取未定义的属性'doc'`
未捕获的类型错误:无法读取未定义的属性 toLowerCase