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 [关闭]