如何在Angular 2中制作2个相关的http请求

时间:2017-08-29 18:17:39

标签: angular rxjs observable

我需要发出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
插入用户凭证, 否则返回任何消息。

我调用第一个服务并获得结果,但我不知道如何添加第二个服务。

有什么想法

service.ts

 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);
            },
            () => {
            }

            );

    }
}

component.ts

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)
  }
}

1 个答案:

答案 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
  })