我需要发出2个http请求(第二个依赖于第一个)将用户凭证插入我的数据库。
第一项服务获取用户凭证(http://localhost:55978/FleetViewDBWebService.asmx/ChekCreds?name=name1&subname=subname1)并检查用户是否已存在,并返回“ID' ID'如果它存在,或者" ok"如果用户不存在。
然后我需要订阅第一个服务并获取返回的值。
如果" ok"拨打第二项服务(http://localhost:55978/FleetViewDBWebService.asmx/InsertUser?name=name1&subname=subname1&Telephone=334580021)
插入用户凭证,
否则返回任何消息。
我调用第一个服务并获得结果,但我不知道如何添加第二个服务。
有什么想法
submitForm($ev, value: any) {
$ev.preventDefault();
for (let c in this.valForm.controls) {
this.valForm.controls[c].markAsTouched();
}
if (this.valForm.valid) {
this.Service.CheckCreds(value)
.subscribe(
res => {
string result=JSON.stringify(res);
},
e => {
alert(e);
},
() => {
}
);
}
}
module.exports = function applyMiddleware (middlewares) {
return function (monkInstance, collection) {
var chain = []
var middlewareAPI = {
monkInstance: monkInstance,
collection: collection
}
chain = middlewares.map(function (middleware) {
return middleware(middlewareAPI)
})
return compose(chain)
}
}
答案 0 :(得分:16)
RxJS的方式是在发出第二个请求之前,使用the switchMap
operator 等待来响应第一个请求。
return this.http.get('url/1')
.switchMap(res1 => {
// use res1 to further control param of the second call
this.http.get('url/2')
})
.subscribe(res2 => {
//do stuff with the second response
})
要同时执行请求(对于彼此不相关的请求),请使用the forkJoin
static operator。
return Observable.forkJoin(
this.http.get('url/1'),
this.http.get('url/2'),
)
.subscribe(([res1, res2]) => {
// res1 and res2 available after both requests are completed
})