Angular2可观察到的问题,无法读取未定义的属性“订阅”

克里斯工厂

我在Angular2中的Observables遇到了问题,它在第一次调用代码时总是导致“无法读取未定义的属性'subscribe'”。

我有一个名为FieldService的服务,该服务具有getFields方法:

getFields(): Observable<any>{

    console.log("FieldService getFields");

    let fields = JSON.parse(localStorage.getItem('organisationFields') || 'null');

    if(!fields) {
       this._backendService.get(this.fieldsUrl).subscribe(response=> {
       let fields = response.data;

       console.log("FieldService no local fields");

       localStorage.setItem('organisationFields', JSON.stringify(fields));

       return Observable.of(fields).map(o => o);
    }, error => { 
        console.error('FieldsService An error occurred', error);
            return Observable.throw(error);
        }); 
    } else {
       console.log("FieldService local fields") 
        return Observable.of(fields).map(o => o);
    }
}

它检查本地存储中是否有任何“字段”,并将它们作为Observable返回,如果没有(第一次登录),我们从后端获取这些字段并将它们存储在localStorage上。

我在ngOnInit的ListComponent.ts中使用了此服务:

this.fieldService.getFields().subscribe( (response) => {
    let fields = response;  
    this.fieldObjects = {};
    for(let fieldIndex of fields){
        this.fieldObjects[fieldIndex.id] = fieldIndex;
    }
   this.getDeviations(this.page, this.config.stage.id, this.config.createdBy);
}, error => { 
    console.error('An error occurred', error);
});

我需要先调用getFields()方法,然后才能调用getDeviations(),但出现此错误:

ERROR TypeError: Cannot read property 'subscribe' of undefined
    at ListComponent.webpackJsonp.../../../../../src/app/deviation/list.component.ts.ListComponent.ngOnInit (list.component.ts:38)

如果localStorage中存在“字段”,则代码每次都有效,但是如果我清除localStorage并需要首次获取它们,则会收到错误消息。怎么了?

安德烈·马特拉卡鲁(Andrei Matracaru)

试试这个

getFields(): Observable<any>{

    console.log("FieldService getFields");

    let fields = JSON.parse(localStorage.getItem('organisationFields') || 'null');

    if(!fields) {
        return this._backendService.get(this.fieldsUrl)
                                    .map(response=> {
                                                let fields = response.data;
                                                console.log("FieldService no local fields");
                                                localStorage.setItem('organisationFields', JSON.stringify(fields));
                                                return fields;
                                            }); 
    } else {
       console.log("FieldService local fields") 
        return Observable.of(fields).map(o => o);
    }
}

在if上,您实际上没有返回任何东西,这就是为什么您变得不确定的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular2-单元测试可观察到的错误“无法读取未定义的属性'subscribe'”

角5-可观察到的返回错误无法读取未定义的属性

可观察到的类型错误:无法读取未定义的属性

Angular2 TypeScript可观察到的问题

Angular2 / 4-无法读取未定义的属性订阅

Angular - Ionic 2 - 无法读取未定义的属性“订阅”

订阅Angular 8中可观察到组件的问题

HTTP可观察到的返回未定义/空

Angular2:无法读取未定义的属性“名称”

Angular2无法读取未定义的属性“ push”

无法读取未定义[Angular2]的属性“ isStopped”

无法读取未定义angular2的属性

如何取消订阅或处理Angular2或RxJS中可观察到的间隔?

无法在 Angular 中读取未定义的属性(读取“订阅”)

可观察变量的Angular2 Observable.forkJoin-ReferenceError:未定义可观察

Angular - TypeError:无法读取未定义的属性“订阅”

Angular 无法读取未定义错误的属性订阅

Angular2 http调用和典型的可观察到的问题

Angular:订阅可观察对象时数据未定义

Angular2可观察到的回调

Angular2 @ TypeScript可观察到的错误

angular2 rxjs可观察到的forkjoin

在Angular2中可观察到的组件属性变化

Angularfire 2。无法读取未定义的属性“订阅”

收到错误“ TypeError:无法观察到未定义”

更新自身中可观察的mobx存储会导致“无法读取未定义<observable>的属性”

(Angular2 和 Typescript)Angular 的 DatePicker 无法读取未定义的属性“切换”

NgZone / Angular2 / Ionic2 TypeError:无法读取未定义的属性“运行”

未定义可观察到的异步运算符