当用户进入页面时,我正在尝试调用两个Web服务调用。 第一个服务调用 - webServiceCallFirst 通常需要 50 秒才能执行,第二个服务调用 - webServiceCallSecond 需要 5 秒才能执行。
当视图转到ionViewDidLoad时,我正在调用这两个服务。
但问题是,在webServiceCallFirst没有返回结果之前,webServiceCallSecond不会被调用。 根据我的理解,这两个调用应该异步发生,webServiceCallSecond 应该首先返回结果,然后返回 webServiceCallFirst。
我做错了什么? 任何帮助将不胜感激。
这就是我做网络服务调用的方式-
ionViewDidLoad() {
this.remedyService.commonServiceCall('webServiceCallFirst',params).subscribe(
data =>{
console.log("webServiceCallFirst Success="+JSON.stringify(data));
},
err =>{
console.log("webServiceCallFirst Error="+JSON.stringify(data));},
},
() =>{
console.log("webServiceCallFirst Completed");
});
this.remedyService.commonServiceCall('webServiceCallSecond',params).subscribe(
data =>{
console.log("webServiceCallSecond Success="+JSON.stringify(data));
},
err =>{
console.log("webServiceCallSecond Error="+JSON.stringify(data));},
},
() =>{
console.log("webServiceCallSecond Completed");
});
}
我的常用服务调用方法-
commonServiceCall(url,objForRequest)
{
var url= "/"+url;
var headers = new Headers();
this.createAuthorizationHeader(headers);
return Observable.fromPromise(
this.appStorage.getValue('remedyAccessToken').then((value)=>{
var token = value.toString();
console.log("TOKEN IN REMEDYSERVICES="+token);
headers.append('Authorization', token);
console.log("header value="+JSON.stringify(headers));
let options = new RequestOptions({ headers: headers });
this.response = this.http.post(url,this.urlEncode(objForRequest),options).map(res => res.json());
console.log("Response JSON="+JSON.stringify(this.response));
return this.response.toPromise();
})
);
}
我正在将 http post observable 转换为承诺,因为我需要从存储中获取补救令牌,并且我再次将承诺转换为可观察,然后订阅 ionViewDidLoad。
PS - 我不想任何 rxJS 合并来同时进行两个服务调用。
尝试仅将this.appStorage.getToken
转换为可观察。
commonServiceCall(url,objForRequest)
{
var url= "/"+url;
var headers = new Headers();
this.createAuthorizationHeader(headers);
return
Observable.fromPromise(this.appStorage.getValue('remedyAccessToken'))
.switchMap((value)=>{//use switchmap to call http observable.
var token = value.toString();
console.log("TOKEN IN REMEDYSERVICES="+token);
headers.append('Authorization', token);
console.log("header value="+JSON.stringify(headers));
let options = new RequestOptions({ headers: headers });
this.response = this.http.post(url,this.urlEncode(objForRequest),options).map(res => res.json());
console.log("Response JSON="+JSON.stringify(this.response));
return this.response;
});
}
这应该比将承诺转换为可观察,然后又将可观察转换为承诺更简单。