Angular2 不能在另一个订阅(可观察)中使用订阅的值 [英] Angular2 cannot use the values of a subscribe in another subscribe (observable)
问题描述
我想在另一个订阅方法中使用一个值,但它给了我 undefined 因为它不是异步的.有没有一种方法可以一起使用这些值?我想在以下订阅方法中再次使用 this.internships
,但它变得未定义.感谢您的帮助!
I wanted to use a value from a subscribe method in another one, but it gives me undefined because it is not async. Is there a method to use those values together? I want to use this.internships
another time in the following subscribe method but it becomes undefined. Thank you for helping!
代码:
ngOnInit(): void {
this._internshipAssignmentService.getInternshipAssignments()
.subscribe(internships => { this.internships = internships; <---- value which gives an object
this.internshipsHelper = internships; console.log(this.internships)},
error => this.msgs.push({
severity: 'error',
summary: 'Error',
detail: 'Er is een onverwachte fout opgetreden.'
}));
this.sub = this._route.params.subscribe(
params => {
let id = +params['id'];
this._internshipAssignmentService.getAllFavorites()
.subscribe(f => {
this.favorites = f;
this.favorite = this.getFavoritesFromIdStudent(1);
console.log(this.internships); <----- value which gives undefined
this.getFavorites(this.favorite);
});
}
);
}
推荐答案
this.internships
是 undefined
因为这些调用是异步的,你可以得到更多信息 此处.
this.internships
is undefined
because these calls are asynchronous, you can get more informations here.
另请注意,您正在使用多个订阅,这不是一个好习惯,您应该使用一些 运算符,如switchMap
map
、pluck
等.
Also note that you are using multiple subscription, which is not a good practice, you should combine your observable using some operators like switchMap
map
,pluck
, etc.
ngOnInit(): void {
this.sub = this._internshipAssignmentService.getInternshipAssignments().do((internships) => {
this.internships = internships; // not needed if you just use it in next callbacks
this.internshipsHelper = internships;
console.log(this.internships)
}).catch(error => {
this.msgs.push({
severity: 'error',
summary: 'Error',
detail: 'Er is een onverwachte fout opgetreden.'
})
}).switchMap(internships => this._route.params.pluck('id').switchMap(id => {
return this._internshipAssignmentService.getAllFavorites().do(f => {
this.favorites = f;
this.favorite = this.getFavoritesFromIdStudent(1);
this.getFavorites(this.favorite);
})
}))
.subscribe();
}
这篇关于Angular2 不能在另一个订阅(可观察)中使用订阅的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!