TypeScript:返回Promise的结果

时间:2017-04-14 13:51:20

标签: typescript ionic-framework promise

我正在开发一款使用Fireface登录Facebook的Ionic应用程序。为此我遵循了这里的文档:https://github.com/angular/angularfire2/blob/master/docs/Auth-with-Ionic2.md

几乎在文档的末尾,您可以看到执行FB登录的代码段(如果可用,使用Native FB App):

  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()创建的Promise。signInWithCredential(facebookCredential)。

你有任何提示/想法吗?

提前多多感谢!

1 个答案:

答案 0 :(得分:0)

好的,所以这是一个解决方案(或解决方法 - 无论你想要什么称呼它)。

我改变了什么:

  • 方法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 => {...});