Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度2可观察问题,无法读取属性';订阅';未定义的_Angular_Rxjs_Observable - Fatal编程技术网

Angular 角度2可观察问题,无法读取属性';订阅';未定义的

Angular 角度2可观察问题,无法读取属性';订阅';未定义的,angular,rxjs,observable,Angular,Rxjs,Observable,我对Angular2中的Observables有问题,它在第一次调用代码时总是导致“无法读取未定义的属性‘subscribe’” 我有一个名为FieldService的服务,它是一个getFields方法: getFields(): Observable<any>{ console.log("FieldService getFields"); let fields = JSON.parse(localStorage.getItem('organisationFie

我对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);
    }
}
我需要先调用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并且第一次需要去获取它们,我就会得到错误。怎么了?

试试这个

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);
    }
}
getFields():可观察{
日志(“FieldService getFields”);
let fields=JSON.parse(localStorage.getItem('OrganizationFields')| |'null');
如果(!字段){
返回此。_backendService.get(this.fieldsUrl)
.map(响应=>{
让字段=response.data;
console.log(“现场服务无本地字段”);
setItem('OrganizationFields',JSON.stringify(fields));
返回字段;
}); 
}否则{
console.log(“现场服务本地字段”)
返回可观察的.of(fields).map(o=>o);
}
}
在if上,您实际上没有返回任何内容,这就是您未定义的原因。

试试这个

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);
    }
}
只需导入此组件,即可解决您的问题

import 'rxjs/add/observable/of';

您不能从传递给
订阅
下一个
错误
处理程序返回值。这不是它的工作原理。而且,一致的缩进在某种程度上有助于使其易读。我不明白你关于返回值
next
error
的意思。我的错误在哪里?修正了契约谢谢安德烈,就是这样。我忘记了
这个前面的
返回
。\u后端服务
,我还把
订阅
改成了
地图
不客气。如果有帮助,请接受我的回答。