1. MergeMap - 串联请求

  • 后一个请求需要前一个请求的返回结果时,需要使用串联请求。

  • 可以使用MergeMap实现, 优势是减少嵌套,优化代码;

代码如下:


import {HttpClient} from '@angular/common/http';
import {mergeMap} from 'rxjs'; @Component({
...
})
export class HttpComponent implements OnInit { constructor(private http: HttpClient) { } ngOnInit() {
// 串联请求, 前面请求会影响后面的请求,前面请求未请求到,后面请求中断;
const httpThis = this;
httpThis.http.get('/api/token').
pipe(
map(token => {
return token;
}),
mergeMap((tokenRes: any) => { // tokenRes接收的是token数据
return httpThis.http.get(`/api/user?token=${tokenRes}`)
.pipe((user) => {
return user;
});
}),
mergeMap((userRes: any) => { // userRes接收的是user数据
return httpThis.http.get(`api/data?user=${userRes}`)
.pipe((data) => {
return data;
});
}))
.subscribe((resp) => { // resp接收的是data数据
console.log('最终结果resp是最后一个mergeMap的data');
});
}
}

2. ForkJoin - 并联请求

  • 多个请求,无所谓先后顺序,等到全部请求完成后执行一定的操作时,需要使用并联请求;

  • 可以使用ForkJoin,和promise方法效果一样,好处是:可以减少嵌套,优化代码;

代码如下:


import {HttpClient} from '@angular/common/http';
import {forkJoin} from 'rxjs'; @Component({
...
}) export class HttpComponent implements OnInit { constructor(private http: HttpClient) { } ngOnInit() { // 并联请求
const post1 = this.requestData1();
const post2 = this.requestData2();
forkJoin([post1, post2])
.subscribe((data: any) => {
const postResult1 = data[0]; // '/api/post1的返回结果'
const postResult2 = data[1]; // '/api/post2的返回结果'
});
} // 并联请求1
requestData1() {
return this.http.get('/api/post1')
.pipe((data) => {
return data;
});
} // 并联请求2
requestData2() {
return this.http.get('/api/post2')
.pipe((data) => {
return data;
});
}
}

Angular7 HttpClient处理多个请求的更多相关文章

  1. HttpClient (POST GET PUT)请求

    HttpClient (POST GET PUT)请求 package com.curender.web.server.http; import java.io.IOException; import ...

  2. HttpClient方式模拟http请求设置头

    关于HttpClient方式模拟http请求,请求头以及其他参数的设置. 本文就暂时不给栗子了,当作简版参考手册吧. 发送请求是设置请求头:header HttpClient httpClient = ...

  3. HttpClient发送get post请求和数据解析

    最近在跟app对接的时候有个业务是微信登录,在这里记录的不是如何一步步操作第三方的,因为是跟app对接,所以一部分代码不是由我写,我只负责处理数据,但是整个微信第三方的流程大致都差不多,app端说要传 ...

  4. HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

    HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...

  5. 使用HttpClient发送Get/Post请求 你get了吗?

    HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议 ...

  6. org.apache.httpcomponents httpclient 发起HTTP JSON请求

    1. pom.xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactI ...

  7. httpclient的几种请求URL的方式

    一.httpclient项目有两种使用方式.一种是commons项目,这一个就只更新到3.1版本了.现在挪到了HttpComponents子项目下了,这里重点讲解HttpComponents下面的ht ...

  8. HttpClient发起Http/Https请求工具类

    <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcl ...

  9. HttpClient方式模拟http请求

    方式一:HttpClient import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.http.*; im ...

随机推荐

  1. 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(一)

    前言 下面是阿里对<阿里巴巴 Java 开发手册>(下称<手册>)的介绍: 凝聚了阿里集团很多同学的知识智慧和经验,这些经验甚至是用血淋淋的故障换来的,希望前车之鉴,后车之师, ...

  2. stage_ros的world文件配置方法

    官方文档参阅:http://rtv.github.io/Stage/modules.html stage_ros是一个基于stage的2D模拟器,用于ROS的仿真测试.虽然现在越来越多的人在使用gaz ...

  3. P1613 跑路 倍增思想 + 邻接矩阵

    题意 给定一个有向图,每条边的花费为1.现在有一个空间跑路器,可以走2^k长度的路,只用花1秒的时间.问从1走到n最少的时间.n <= 50, k <= 64. 思路 这道题说是倍增,但是 ...

  4. 题解 bzoj 2151 种树

    题意 传送门 手写堆大法好啊,题解貌似没有结构体堆的做法,思路有些像配对堆,关于配对堆请自行百度,因为本蒟蒻不会.. 以下是蒟蒻的做法:建立一个大根堆a维护最大价值里面存入它的编号以及价值.听说配对堆 ...

  5. 2018 Multi-University Training Contest 3(部分题解)

    Problem F. Grab The Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Ja ...

  6. 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(3)-项目依赖注入

    简介 依赖注入主要是一种结构性的模式,注重的是类与类之间的结构,它要达到的目的就是设计原则中最少知道和合成复用的原则,减少内部依赖,履行单一职责,最终就是强解耦.依赖注入目前最好的实现就是依赖注入容器 ...

  7. Intellij IDEA在maven项目中添加外部Jar包运行

    一. 问题概述 我们知道Intellij IDEA是非常好用的Java语言开发的集成环境.提供了非常多实用的功能,包括了智能代码助手.代码自动提示.代码重构.各种插件等,当然也集成了maven 正常情 ...

  8. mariadb报:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111 "Connection refused")

    我这边移除了mysql.sock文件后,重启服务就成功了. 还有一种情况,就是加入galera后,可能是server.cnf配置信息出了问题导致的,修改后,重新运行galera即可,数据库就可以启动成 ...

  9. ssh-agent代理的简单用法

    前言 在ansible的官方文档中,提到了强烈推荐用ssh-agent来管理密钥 究竟ssh-agent是什么,它有什么用法呢,下面来一探究竟. ssh-agent是什么?用处是什么? ssh-age ...

  10. JAVA集成JPush

    本篇集成为web项目手动集成JPush 一.获取AppKey.Master Secret https://docs.jiguang.cn 成为极光用户创建一个应用拿到(AppKey.Master Se ...