Angular 2 Http,RxJS无法读取未定义的属性'unsubscribe'

时间:2016-07-14 16:46:00

标签: angular http rxjs

编辑:我已经解决了这个问题。请参阅下面的答案,因为它可能对某人有所帮助。如果您知道更好的答案,请发布! :)

我正在使用Angular 2 Universal API缓存,并且有一个像这样的ApiService:

import {Http} from '@angular/core';

export class ApiService {
    constructor(private http: Http, private cache: CacheService)
}

get(url) {
    if (cache_data) {
        //Create new observable from scratch
        return new Observable(sub => {
            sub.next(cache_data);
        });
    } else {
        //Use Angular 2's Http service, which creates an Observable for me
        return this.http.get(url)
            .map(res => res.json())
            .catch(err => throw err);
    }
}

在我订阅的另一项服务中,我有:

import {ApiService} from './api/api.service';

export class ConsumerService {
    constructor(apiService: ApiService) {}
    let sub = this.apiService.get('www.example.com')
        .subscribe(data => {
            console.log(data);
            sub.unsubscribe();
        })
}

如果请求的数据不在缓存中,并且服务器必须为其发出http请求,则上述代码可以正常工作。但是,如果缓存中的数据 ,则会收到以下错误:Cannot read property 'unsubscribe' of undefined 当然,未定义是指我的变量sub

我最初的想法是我在缓存中创建的Observable类型与Angular 2的Http observable不同,因此会产生错误。我试过测试一下,但无法确认。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

我决定通过保持应用程序的异步样式来解决这个问题。我只是将它包装在一个Promise中,然后将其包装在一个可观察的中,而不是仅仅在一个observable中返回我的cache_data。

let cacheFromPromise = new Promise(resolve => {
    resolve(cache_data);
});

return Observable.fromPromise(cacheFromPromise);

现在一切都很完美。