将http post1的响应传递到另一个,并从Angular的post2中获取响应

问题描述 投票:3回答:3

我正在尝试发布授权用户的请求。登录后,我想发送另一个http.post来设置有关该用户的一些信息。到目前为止,我的登录电话有效:(有角)auth_service.ts:


Login() {
    let promiseResult : any;
    this.http.post<any>('/auth/Login', this.auth_payload).toPromise().then(data => {
      promiseResult = data;
      console.log("Login call" ,promiseResult)
      return promiseResult

    });

auth_component.ts:

 onSubmit(form : NgForm){
    this.authService.Login()
  }

我在理解如何使第二个职位要求有效时遇到了麻烦。我想按HTML上的一个按钮,将在该按钮上检索到第二个调用的响应。我应该如何在这两个请求之间建立“连接”?

我已经阅读了有关Promises和Observables的文章,但在这种情况下我不知道如何使用它们。

angular promise observable es6-promise
3个回答
1
投票
YourMethod(): Observable < any > {
  let firstResult;
  let secondResult;

  return http.get('////').pipe(
    switchMap(res1 =>  this.http.post<any>('/auth/Login', this.auth_payload).pipe(
      map(res2 => [res1, res2])
    ))
  );
}

CallingMethod() {
  this.YourMethod().subscribe(([firstResult, secondResult]) => {
    /// Some logic
  })
}

1
投票

在promise回调中向第二个端点添加呼叫:

Login() {
    let promiseResult : any;
    this.http.post<any>('/auth/Login', this.auth_payload).toPromise().then(data => 
    {
      promiseResult = data;
      console.log("Login call" ,promiseResult)
      this.setInformation(data)
      return promiseResult

    });

setInformation(userData) {
    let promiseResult : any;
    this.http.post<any>('/information/endPoint', userData).toPromise().then(data => {
      promiseResult = data;
      console.log("set Information call" ,promiseResult)
      return promiseResult

    });

但是,如果登录名和设置信息位于同一台服务器上,则可以直接在服务器应用程序中进行管理,但是我不确定这在概念上是否正确


1
投票

无论您从then获得的回报将被传递到下一个,因此您都可以这样做:

this.http.post<any>('/auth/Login', this.auth_payload)
    .toPromise()
    .then(data => this.doSomethingMore(data))
    .then(moreData => this.doSomethingElse(moreData));

您可以用.then(data => this.doSomethingMore(data))缩短.then(this.doSomethingMore),但为清楚起见,我没有这样做。

如果doSomethingMore返回一个Promise,它将被执行并将其结果传递给下一个then

与可观察的相同:

this.http.post<any>('/auth/Login', this.auth_payload)
    .pipe(
        switchMap(data => this.doSomethingMore(data)),
        switchMap(moreData => this.doSomethingElse(moreData)),
    );
© www.soinside.com 2019 - 2024. All rights reserved.