java服务器控件的值_组件BehaviorSubject订阅服务器不接收异步http请求发出的值

我试图理解为什么这个BehaviorSubject订阅者不接收发出的值 .

在我的组件ngOnInit中,我将订阅服务器设置为一个返回对BehaviorSubject的引用的服务方法:

// project-detail.component.ts

ngOnInit() {

this.activatedRoute.params.subscribe((data: Params) => {

if (data && data.id) {

this.projectService.getProject(data.id).subscribe(project => {

console.log(project);

});

}

});

}

在服务中,我发出一个http请求,然后将响应数据推送到BehaviorSubject的下一个方法:

// project.service.ts

import { HttpClient } from '@angular/common/http';

import { BehaviorSubject, Observable } from 'rxjs';

@Injectable()

export class ProjectService {

private apiUrl = envLocal.apiJsonServerUrl;

private currentProjectObs$ = new BehaviorSubject(null);

constructor(private http: HttpClient) {

}

getProject(id: number = 0) {

if (id) {

this.http.get(`${this.apiUrl}/projects/${id}`)

.subscribe(project => {

this.currentProjectObs$.next(project);

});

}

return this.currentProjectObs$;

}

我的理解是我的组件的ngOnInit中的订阅者应该监听从getProject返回的BehaviorSubject引用的更改(即currentProjectObs $) .

当ngOnInit首次运行时,它调用getProject,并且由于getProject内的http调用是异步的,因此返回currentProjectObs $,初始值为null . 但是一旦http get请求完成,currentProjectObs $ .next(项目)就会被调用,我希望,ngOnInit中的订阅者可以接收新发出的值 - 但这不会发生 .

我想了解这里发生了什么以及为什么订阅者没有从http请求中收到异步值,以及如何修复它以便它 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值