如何在带有firebase的angular2中使用Promise来将登录转换为服务

时间:2016-02-13 12:49:03

标签: firebase promise angular ionic2

我正在学习如何编码。我正在努力应对承诺,以及如何使用它们。

我想通过Facebook与Firebase完成登录。

当我不将此作为服务

时,代码可以正常工作
  authWithFacebook(){
    this.usersRef.authWithOAuthPopup("facebook", (error) => {
      if (error) {
        console.log(error);
      }else if (this.isLoggedIn && this.newUser) {
        this.usersRef.child(this.authData.uid).set({
          NomComplet: this.authData.facebook.displayName,
          ProfileCached: this.authData.facebook.cachedUserProfile,
          Nom : this.authData.facebook.cachedUserProfile.last_name,
          Prenom : this.authData.facebook.cachedUserProfile.first_name,
          ProfileImg: this.authData.facebook.profileImageURL,
          Agemoyen : this.authData.facebook.cachedUserProfile.age_range,
          Localite : this.authData.facebook.cachedUserProfile.locale,
        });
      }
    });
    console.log("je suis connecté" + " " + this.authData.facebook.displayName )
  }

我尝试将我的代码转换为可在整个应用中使用的服务。但它不起作用:

authWithOAuth(){
  return new Promise(function(resolve, reject){
    this.usersRef.authWithOAuthPopup("facebook", (error) => {
      if (error) {
        console.log(error);
        reject(error);
      }else {
        resolve();
      }
    })
  })
}

任何人都可以帮助我,或者告诉我要阅读哪些文档才能完全理解这一点?

1 个答案:

答案 0 :(得分:1)

您需要像这样重构代码:

authWithFacebook(){
  this.authService.authWithOAuth().then(
    () => {
      this.usersRef.child(this.authData.uid).set({
        NomComplet: this.authData.facebook.displayName,
        ProfileCached: this.authData.facebook.cachedUserProfile,
        Nom : this.authData.facebook.cachedUserProfile.last_name,
        Prenom : this.authData.facebook.cachedUserProfile.first_name,
        ProfileImg: this.authData.facebook.profileImageURL,
        Agemoyen : this.authData.facebook.cachedUserProfile.age_range,
        Localite : this.authData.facebook.cachedUserProfile.locale,
      });
    },
    (err) => {
      console.log(error);
    }
  );
}

使用承诺的then方法。