我需要创建一个函数来按顺序进行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运算符来实现.本例使用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);
    });
}

Typescript相关问答推荐

node—redis:如何在redis timeSeries上查询argmin?

`((PrevState:NULL)=>;NULL)|null`是什么意思?

如何在使用`Next—intl`和`next/link`时导航

TypeScrip-将<;A、B、C和>之一转换为联合A|B|C

有条件地删除区分的联合类型中的属性的可选属性

在实现自定义主题后,Angular 不会更新视图

类型';字符串|数字';不可分配给类型';未定义';.类型';字符串';不可分配给类型';未定义';

如何从对象或类动态生成类型

Angular 16将独立组件作为对话框加载,而不进行布线或预加载

在Reaction中折叠手风琴

作为函数参数的联合类型的键

使用Cypress测试从Reaction受控列表中删除项目

递归生成常量树形 struct 的键控类型

有没有更干净的方法来更新**key of T**的值?

如何在TypeScript中描述和实现包含特定属性的函数?

可以';t使用t正确地索引对象;联合;索引类型

具有枚举泛型类型的 Typescript 对象数组

Angular另一个组件的nativeelement未定义

如何在react-router-dom v6中捕获pop事件

如果在另一个对象中指定了递归省略字段?