Angular的可观察性从未成功

时间:2018-01-20 04:11:06

标签: javascript angular

我是全栈开发的新手。我从小型MEAN应用程序开始,我面临以下问题:

//register user
    this.authservice.registerUser(newUser).subscribe(data =>{
      if(data.success){
         this.flashmessage.show('You are now register and can log in', {cssClass: 'alert-success', timeout: 3000});
         this.router.navigate(['/login']);
      }
      else{
        this.flashmessage.show('Something went wwrong', {cssClass: 'alert-danger', timeout: 3000});
        this.router.navigate(['/register']);
      }
    });

我在注册按钮的(click)上调用了这个函数,数据成功进入数据库,如果我在Angular之外手动执行后端API,我认为它是有效的。但在Angular中,此函数进入else并显示错误消息,即使成功插入后也是如此。

有人可以告诉我究竟是哪个问题?

1 个答案:

答案 0 :(得分:0)

如果出现问题,订阅observable并执行某些代码的正确方法是:

this.authservice.registerUser(newUser).subscribe(data => {
     this.flashmessage.show('You are now register and can log in', {cssClass: 'alert-success', timeout: 3000});
     this.router.navigate(['/login']);
  },
  error => {
    this.flashmessage.show('Something went wrong: ' + error, {cssClass: 'alert-danger', timeout: 3000});
    this.router.navigate(['/register']);
  });

原因是subscribe函数的第一个参数仅在您的请求满意时执行(因此如果成功与否则无需验证其内部,我们知道它成功了)。要在请求不成功时执行某些操作,请使用第二个函数,作为第二个参数传递给subscribe

此外,如果下次要调试问题,请使用以下命令检查变量:console.log("my_var:", my_var),它将在浏览器的控制台中打印变量my_var的所有内容。如果您使用的是Chrome,请打开开发工具(按F12)以显示控制台。