【问题标题】:Passing the response of http post1 to another and getting response back from post2 in Angular将 http post1 的响应传递给另一个并从 Angular 中的 post2 获取响应
【发布时间】:2020-09-26 02:40:46
【问题描述】:

我正在尝试发布授权用户的请求。登录后,我想发送另一个 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


    【解决方案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
      })
    }
    

    【讨论】:

      【解决方案2】:

      在您的承诺回调中添加对您的第二个端点的调用:

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

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

      【讨论】:

      • 服务器应用程序是指后端吗? (我是初学者请跟我一起)。我必须从前端向服务器发送请求并从那里得到响应
      【解决方案3】:

      无论您从 then 返回什么,都将传递给下一个,因此您可以这样做:

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

      您可以将 .then(data =&gt; this.doSomethingMore(data)) 缩短为 .then(this.doSomethingMore),但为了清楚起见,我没有这样做。

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

      与 Observable 相同:

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

      【讨论】:

        猜你喜欢
        • 2019-01-07
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        相关资源
        最近更新 更多