http.get 中的 Observable 订阅

Posted

技术标签:

【中文标题】http.get 中的 Observable 订阅【英文标题】:Observable Subscribe in http.get 【发布时间】:2017-08-01 07:05:34 【问题描述】:

在我的http.get 中让“MyAddressConfig”返回一个字符串有点麻烦。它从 Ionic2 Storage 获取数据。问题是我不断得到

GET http://localhost:0000/[object%20Object]my/path?&tst=1 404(未找到)

有什么想法吗? -谢谢

我的地址配置

GetDataFromStorage: Observable<any> =

Observable.fromPromise(
    Promise.all([
        this.ionicStorage_.get('MyRestIPAddress'), // 'localhost'
        this.ionicStorage_.get('MyRestIPPort'), // '0000'
    ])
        .then(([val1, val2]) => 
            this.MyRestIPAddress = val1;
            this.MyIPPort = val2;
            return [val1, val2];
        )
);

 GetRestAddress() 
        return this.GetDataFromStorage.subscribe(([val1, val2]) =>  // 'localhost','0000'
           let RestAddress = 'http://' + val1 + ':' + val2 + '/rest/';
           console.log(RestAddress);
           return RestAddress;  // 'http://localhost:0000/rest/'
        );
    

我的服务

getStoresSummaryResults(): Observable<MyTypeClass> 
        let MyConfig: MyAddressConfig;
        MyConfig = new MyAddressConfig(this.ionicStorage_);

        return this.http_.get(MyConfig.GetRestAddress() + 'my/path?&tst=1')
            .map(res => res.json()) 
            .catch(this.handleError); 
    

【问题讨论】:

【参考方案1】:

你的MyConfig.GetRestAddress()不返回字符串,它返回一个对象。 [object%20object] 是你从 MyConfig.GetRestAddress() because your object is parsed to a string 得到的

这是因为GetRestAddress()return 订阅。像这样的东西就是你想要的:

GetRestAddress()  //return the url as Observable
    return this.GetDataFromStorage.switchMap(([val1, val2]) =>  
       let RestAddress = 'http://' + val1 + ':' + val2 + '/rest/';
       return Observable.of(RestAddress);  // 'http://localhost:0000/rest/'
    );



getStoresSummaryResults(): Observable<MyTypeClass> 
    let MyConfig: MyAddressConfig;
    MyConfig = new MyAddressConfig(this.ionicStorage_);

    return MyConfig.GetRestAddress()
        .switchMap(url => this.http_.get(url + 'my/path?&tst=1')
        .map(res => res.json()) 
        .catch(this.handleError); 

【讨论】:

嘿,非常感谢!

以上是关于http.get 中的 Observable 订阅的主要内容,如果未能解决你的问题,请参考以下文章

订阅 behviorSubject 中的 observable:出现错误

Angular2 http.get() ,map(), subscribe() 和 observable 模式 - 基本理解

在哪里订阅 Angular 中的 observable、构造函数或 ngoninit [关闭]

您应该在 Angular2 父/子组件层次结构中的哪个点订阅 observable?

RxJS 等待订阅 Observable 完成

订阅调用后的空数组[重复]