Angular2 不能在另一个订阅(可观察)中使用订阅的值 [英] Angular2 cannot use the values of a subscribe in another subscribe (observable)

查看:19
本文介绍了Angular2 不能在另一个订阅(可观察)中使用订阅的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在另一个订阅方法中使用一个值,但它给了我 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.internshipsundefined 因为这些调用是异步的,你可以得到更多信息 此处.

this.internships is undefined because these calls are asynchronous, you can get more informations here.

另请注意,您正在使用多个订阅,这不是一个好习惯,您应该使用一些 运算符,如switchMap mappluck 等.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆