无法使用订阅 angular 的结果
Can't use result from subscribe angular
我遵循 this 指南,并尝试在 不相关的组件:与服务共享数据 段落
中做类似的事情
数据服务:
@Injectable()
export class MyDataService{
private messageSource = new BehaviorSubject(null);
currentMessage = this.messageSource.asObservable();
constructor(private http: HttpClient) {
setInterval(() => { this.changeMessage(this.resultFromRestCall()); }, 10 * 1000);
}
changeMessage(message: object) {
this.messageSource.next(message);
}
resultFromRestCall(){
const json;
this.http.get<object>(myApiUrl).subscribe(res =>
json['data'] = res['data'] //this is an example
);
return json;
}
分量:
export class MyComponent implements OnInit {
constructor(private dataservice: MyDataService) {}
ngOnInit() {
this.dataservice.currentMessage.subscribe(
message => {this.handleVarChange(message); }
);
}
handleVarChange(message) {
console.log(message.data);
}
使用此代码,我在 handleVarChange
日志中得到了 "undefined"
我没有在订阅中调用this.handleVarChange(message);
而是console.log(消息)我得到了正确的结果。
所以,我的问题是是否可以在我的组件的某些功能中使用来自数据服务的值。
提前致谢
省略handleVarChange
中的.data
:
而不是
handleVarChange(message) {
console.log(message.data);
}
写
handleVarChange(message) {
console.log(message);
}
有:
resultFromRestCall(){
const json;
this.http.get<object>(myApiUrl).subscribe(res =>
// takes x amount of time to populate json
json['data'] = res['data'] //this is an example
);
// executed instantly after above request has been called
return json;
}
您返回 json
之前 它已被填充,因为请求是异步的。
相反,你可以稍微翻转一下,先调用 resultFromRestCall()
,当你得到响应时,然后 调用 changeMessage()
:
setInterval(() => {
this.resultFromRestCall().subscribe((data) => {
this.changeMessage(data);
});
}, 10 * 1000);
其中 resultFromRestCall
只是 returns 一个可观察的:
resultFromRestCall(){
return this.http.get<object>(myApiUrl);
}
也记得在OnDestroy
中clearInterval
!
DEMO
我遵循 this 指南,并尝试在 不相关的组件:与服务共享数据 段落
中做类似的事情数据服务:
@Injectable()
export class MyDataService{
private messageSource = new BehaviorSubject(null);
currentMessage = this.messageSource.asObservable();
constructor(private http: HttpClient) {
setInterval(() => { this.changeMessage(this.resultFromRestCall()); }, 10 * 1000);
}
changeMessage(message: object) {
this.messageSource.next(message);
}
resultFromRestCall(){
const json;
this.http.get<object>(myApiUrl).subscribe(res =>
json['data'] = res['data'] //this is an example
);
return json;
}
分量:
export class MyComponent implements OnInit {
constructor(private dataservice: MyDataService) {}
ngOnInit() {
this.dataservice.currentMessage.subscribe(
message => {this.handleVarChange(message); }
);
}
handleVarChange(message) {
console.log(message.data);
}
使用此代码,我在
handleVarChange
日志中得到了 "undefined"我没有在订阅中调用
this.handleVarChange(message);
而是console.log(消息)我得到了正确的结果。所以,我的问题是是否可以在我的组件的某些功能中使用来自数据服务的值。
提前致谢
省略handleVarChange
中的.data
:
而不是
handleVarChange(message) {
console.log(message.data);
}
写
handleVarChange(message) {
console.log(message);
}
有:
resultFromRestCall(){
const json;
this.http.get<object>(myApiUrl).subscribe(res =>
// takes x amount of time to populate json
json['data'] = res['data'] //this is an example
);
// executed instantly after above request has been called
return json;
}
您返回 json
之前 它已被填充,因为请求是异步的。
相反,你可以稍微翻转一下,先调用 resultFromRestCall()
,当你得到响应时,然后 调用 changeMessage()
:
setInterval(() => {
this.resultFromRestCall().subscribe((data) => {
this.changeMessage(data);
});
}, 10 * 1000);
其中 resultFromRestCall
只是 returns 一个可观察的:
resultFromRestCall(){
return this.http.get<object>(myApiUrl);
}
也记得在OnDestroy
中clearInterval
!