Router.navigation在Promise中不起作用

时间:2019-05-22 18:39:52

标签: angular angular-promise angular-router

在完成Google登录后,我很累从浏览页面导航到仪表板。将令牌存储在localStorage中后,promise中的导航不起作用。

在LoginService中,googlelogin()会在验证和存储后返回承诺。但是在收到返回的诺言的LoginComponent中,router.navigation无法正常工作。

LoginComponent

loginwithgoogle(){
    this.loginservice.googlelogin().then(()=>{
      console.log("login");
      this.route.navigate(["../Home"],{relativeTo:this.activatedroute});
    });
  }

LoginService

googlelogin(){
    return new Promise(()=>{
      var provider = new firebase.auth.GoogleAuthProvider();
        firebase.auth().signInWithPopup(provider).then(function(result) {
        var idToken = result.credential.idToken;
        localStorage.setItem('token',idToken);
      })
    })
  }

2 个答案:

答案 0 :(得分:0)

您的诺言中缺少“成功”回叫电话

return new Promise((successCallback)=>{
    .....yourcode
    successCallback(someReturnValuePassedToThenCallback);
}

这就是为什么我更喜欢可观察的东西。

答案 1 :(得分:0)

无需使用Promise构造函数。只需通过firebase返回的承诺即可:

googlelogin() {
      var provider = new firebase.auth.GoogleAuthProvider();
      return firebase.auth().signInWithPopup(provider).then(/* process response */);
}