TypeScript:返回一个承诺的结果
Posted
技术标签:
【中文标题】TypeScript:返回一个承诺的结果【英文标题】:TypeScript: Return Result of a Promise 【发布时间】:2017-09-10 19:07:07 【问题描述】:我正在开发一个使用 Fireface Login 和 Facebook 的 Ionic 应用程序。为此,我在这里关注了文档:https://github.com/angular/angularfire2/blob/master/docs/Auth-with-Ionic2.md
几乎在文档的末尾,您可以看到进行 FB 登录的一段代码(如果可用,请使用本机 FB 应用程序):
signInWithFacebook(): firebase.Promise<FirebaseAuthState>
if (this.platform.is('cordova'))
return Facebook.login(['email', 'public_profile']).then(res =>
const facebookCredential = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken);
return firebase.auth().signInWithCredential(facebookCredential);
);
else
...
这种搞砸了方法signInWithFacebook的返回类型。实际上,该方法应该返回由 Facebook.login(...) 触发的 Promise 的结果——但它确实返回了具有不同数据类型的 FacebookLogin-Promise 本身。 我有点困惑如何重新建模这些行以正确返回由 firebase.auth().signInWithCredential(facebookCredential) 创建的 Promise。
你有什么提示/想法吗?
提前非常感谢!
【问题讨论】:
没有使用过标志性的库,所以不知道你到底在引用什么。你能更详细地解释一下“。实际上方法应该返回” signInWithFacebook 的返回类型是 firebase.Promisereturn firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken).then((facebookCredential)=>firebase.auth().signInWithCredential(facebookCredential));
呢?
我如何获得 res.authResponse.accessToken?这是我在您的建议中找不到的“外部”承诺(通过 Facebook-login())结果的一部分
【参考方案1】:
好的,这里有一个解决方案(或变通方法——随便你怎么称呼它)。
我改变了什么:
signInWithFacebook 方法确实返回 void 它采用匿名函数作为参数,当内部 Promise 解析时执行代码如下:
signInWithFacebook(success: (FirebaseAuthState) => void): void
if (this.platform.is('cordova'))
Facebook.login(['email', 'public_profile']).then(res =>
const facebookCredential = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken);
firebase.auth().signInWithCredential(facebookCredential).then( fbas => success(fbas));
);
else
this.auth$.login(
provider: AuthProviders.Facebook,
method: AuthMethods.Popup
).then(res => success(res));
这是调用方法的方法:
this._auth.signInWithFacebook2(res => ...);
【讨论】:
以上是关于TypeScript:返回一个承诺的结果的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Typescript 认为 async/await 返回包装在承诺中的值?
Typescript/Angular - 模态结果返回后调用单独的函数