HTTP请求取消订阅不起作用

时间:2018-08-21 05:57:12

标签: angular typescript subscribe reactivex

我正在从服务中的json文件中获取数据,并从我的组件中进行订阅。我正在对数据进行条件检查,一旦数据匹配,我想停止订阅,但是它不起作用,仍然在订阅。

服务

getUserData() {
     const url = './assets/json/userslist.json';
     return this.http.get(url);
}

组件

const subscription = this.getuser.getUserData().subscribe(data => {
  Object.values(data).forEach((userdetail) => {
    // tslint:disable-next-line:max-line-length
    if (userdetail.username.indexOf(form.value.email) !== -1 && userdetail.password == form.value.password) {
      console.log('asd');
      if (userdetail.active == true) {
        console.log('asasdfasd');
        this.EventEmitterObj.emit(form.value.email);
        this.router.navigateByUrl('/home');
      } else if (userdetail.active == false) {
        console.log('asd23423432');
        this.deactivateAlert = 'The account is deactivated';
      }
      subscription.unsubscribe();
      console.log('issue');
    } else {
      console.log('12341243');
      this.deactivateAlert = 'Incorrect Username/Password';
    }
  });
});

2 个答案:

答案 0 :(得分:2)

Angular HTTPClient

角度HTTPClient将在请求完成后自动unsubscribe。 这是成功错误

同样,在您取消订阅时,http请求已经返回了success,因此已完成

我从您的代码中了解到的是,您期望unsubscribe停止循环。 UnsubscribingSubscription并不意味着停止您的foreach循环。要停止foreach循环,只需使用returnbreak

答案 1 :(得分:-3)

您的取消订阅位于订阅调用内部。应该位于外部,因为订阅调用仅在收到服务器的响应后才会执行。

如果您要取消订阅请求,则应在外面取消订阅。

如果要中断foreach循环,请使用返回

让我知道您是否需要进一步澄清