Angular - 按顺序进行多个 HTTP 调用

标签 angular typescript observable

我需要创建一个函数来按顺序进行 HTTP 调用,以便将一个调用的响应用于另一个调用,例如从第一次调用中获取用户的 IP 地址,并使用该 IP 在第二次调用中注册用户。

演示代码:

registerUser(user: User) {
    this.utility.getIpAddress()
    .subscribe(data => {
        this.ipAddress = data.ip;
    });
    const body = {
        UserName: user.UserName,
        Email: user.Email,
        //...
        UserIP: this.ipAddress,
    }
    return this.http.post(this.registerAPI, body);
}

最佳答案

这可以使用 switchMap 来实现运算符(operator)。此示例使用 RxJS 5.5+ 管道运算符。

import { switchMap } from 'rxjs/operators';

registerUser(user: User) {
  return this.utility.getIpAddress().pipe(
    switchMap(data => {
      this.ipAddress = data.ip;

      const body = {
        UserName: user.UserName,
        Email: user.Email,
        UserIP: this.ipAddress,
      };

      return this.http.post(this.registerAPI, body);
    })
  )
}

RxJS < 5.5:

import { switchMap } from 'rxjs/operators';

registerUser(user: User) {
  return this.utility.getIpAddress()
    .switchMap(data => {
      this.ipAddress = data.ip;

      const body = {
        UserName: user.UserName,
        Email: user.Email,
        UserIP: this.ipAddress,
      };

      return this.http.post(this.registerAPI, body);
    });
}

关于Angular - 按顺序进行多个 HTTP 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51212448/

相关文章:

javascript - Angular 9在单个元素滚动上添加类

html - 如何覆盖 Bootstrap 中主按钮的样式

javascript - SWT 浏览器未在 Eclipse View 中呈现 Angular 2 页面

typescript - Firestore 在对象数组字段中查找具有特定对象的文档

typescript - TypeScript 中 'set' 函数的正确类型是什么?

Angular 2 双向数据绑定(bind)不起作用

javascript - 展平 Angular2 中的可观察数组

Angular Observables 和 Http

angular - RXJS 如何知道 Finalize 何时完成?

angular - 使用 AngularFire2 处理 Firebase 权限错误