我正在从服务中的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';
}
});
});
答案 0 :(得分:2)
角度HTTPClient
将在请求完成后自动unsubscribe
。
这是成功或错误。
同样,在您取消订阅时,http请求已经返回了success
,因此已完成。
我从您的代码中了解到的是,您期望unsubscribe
停止循环。 Unsubscribing
和Subscription
并不意味着停止您的foreach
循环。要停止foreach
循环,只需使用return
或break
。
答案 1 :(得分:-3)
您的取消订阅位于订阅调用内部。应该位于外部,因为订阅调用仅在收到服务器的响应后才会执行。
如果您要取消订阅请求,则应在外面取消订阅。
如果要中断foreach循环,请使用返回。
让我知道您是否需要进一步澄清