subscribe is not a function error when trying to use JSON file in Angular 2

subscribe is not a function error thrown when trying to use JSON file in Angular 2

我正在尝试将 JSON 文件导入我的服务,但收到此错误

Error: Uncaught (in promise): TypeError: this._qs.getBasicInfo(...).subscribe is not a function(…)

截至目前,我的 service 文件看起来像这样

@Injectable()

export class QuestionService {

BasicInfoData: Observable<any>;

constructor(private http: Http){}

getBasicInfo() {
    this.BasicInfoData = this.http.get('app/questionnaire/questions.json').map(res =>
    res.json()).subscribe(data => this.BasicInfoData = data ) as Observable<any>

    return this.BasicInfoData;
    }

}

我的 component 看起来像这样

@Component({

    moduleId    : module.id,
    selector    : 'questionnaire-page',
    templateUrl : './questionnaire.component.html',
    providers   : [ QuestionService ]
})

export class QuestionnairePage implements OnInit, OnChanges {

    BasicInfo: Observable<any>;

    constructor(private _qs: QuestionService, private fbuild: FormBuilder) {}

    ngOnInit() {
        this._qs.getBasicInfo().subscribe( data => this.BasicInfo = data );
     console.log(this.BasicInfo);
    }

}

在尝试从我的服务中调用数据之前,我让它工作得非常好

this.http.get('app/questionnaire/questions.json').subscribe(res => {
     this.Questions = res.json()
     console.log(this.Questions);
});

我开始尝试使用同样的东西,在阅读时,我添加了 Observable。我遇到另一个 post 关于 RXJS 说他们的问题是在数据到达之前直接订阅数据,他们的解决方法是先使用 .map() 然后订阅它。它将我的错误从 undefined 错误更改为我现在得到的错误,所以我认为这是朝着正确方向迈出的一步。我一直在来回尝试各种事情,它要么会产生另一个错误,表明它在此之前中断,要么我只是从同一个代码片段中得到同样的错误。为什么会这样?

这段代码returns一个Subscription

getBasicInfo() {
    this.BasicInfoData = this.http.get('app/questionnaire/questions.json').map(res =>
    res.json()).subscribe(data => this.BasicInfo = data ) as Observable<any>

    return this.BasicInfoData;
    }
}

subscribeObservable 而非 Subscription 的方法。 你想要的大概是

getBasicInfo() {
    return this.http.get('app/questionnaire/questions.json')
    .map(res => res.json());
}

这样会返回一个可以订阅的 Observable