我想要一些在数据服务中的数据,并且是可观察的,当我订阅这些数据时,我会发出一个HTTP请求并将数据与之一起发送。当收到响应时,我订阅它并尝试调用同一数据服务中的函数。代码如下:
// data service //
this.data.currentMessage.subscribe((shared_data) => {
// http request //
this.httpService
.send_analysis_options(shared_data)
.subscribe((response: any) => {
// data service change function //
this.data.changeMessage(response)
});
});问题是当这个代码块被调用时,它突然发送无限的请求并进入无限循环。当我删除它调用changeMessage函数的代码行时,一切都正常。请帮我解决这个问题。谢谢
更新:数据服务中的代码:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class DataService {
template: any = {
filename: '',
submit_id: 0,
Referer: '',
'network-routing': '',
package: '',
priority: 0,
timeout: 0,
filesize: 0,
package_extension: '',
'new_key': '',
'new_value': '',
'remote-control': false,
'enable-injection': false,
'process-memory-dump': false,
'full-memory-dump': false,
'enforce-timeout': false,
'simulated-human-interaction': false,
mime: '',
machines: [],
selected_machine: ''
};
private messageSource = new BehaviorSubject<object>(this.template);
currentMessage = this.messageSource.asObservable();
constructor() {}
changeMessage(coming_message: any) {
for (let x in coming_message) {
this.template[x] = coming_message[x];
}
this.messageSource.next(this.template);
console.log(this.template)
}
}发布于 2021-08-02 14:37:28
您的代码片段可以理解为:“当消息更改时,发送一些数据,然后更新当前消息”,这当然会导致无限循环。
我猜这段代码是在一些用户交互(例如: click)之后调用的,你应该在检索到当前消息值后立即取消订阅,如下所示:
this.data.currentMessage.pipe(first()).subscribe((shared_data) => {/*..*/});此外,不要忘记取消订阅您的send_analysis_options订阅,因为这将导致内存泄漏(使用first()或unsubscribe)。
https://stackoverflow.com/questions/68616966
复制相似问题