首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular快速学习笔记(4) -- Observable与RxJS

HTTP 模块使用可观察对象来处理 AJAX 请求和响应 路由器和表单模块使用可观察对象来监听对用户输入事件的响应 事件发送器 EventEmitter Angular 提供了一个 EventEmitter...会订阅一个可观察对象或承诺,并返回其发出的最后一个值。...防抖(这样才能防止连续按键时每次按键都发起 API 请求,而应该等到按键出现停顿时才发起) 如果输入值没有变化,则不要发起请求(比如按某个字符,然后快速按退格)。...如果已发出AJAX 请求的结果会因为后续的修改而变得无效,那就取消它。...如果使用承诺和其它跟踪 AJAX 调用的方法会非常复杂,而使用可观察对象,这非常简单: import { pipe, range, timer, zip } from 'rxjs'; import {

5K20
您找到你想要的搜索结果了吗?
是的
没有找到

RxJS 快速入门

在同步环境下,两者各有优缺点,甚至有时候过程式会更简明一些,但在异步环境下(最典型的场景是一个 Ajax 请求完成后紧接着执行另一个 Ajax 请求),由于无法控制执行和完成的顺序,所以就无法使用传统的过程式写法...传统写法下,当我们调用一个 Ajax 时,就要给它一个回调函数,这样当 Ajax 完成时,就会调用它。当逻辑简单的时候,这毫无问题。但是我要串起 10 个 Ajax 请求时该怎么办呢?十重嵌套吗?恩?...再举个编程领域的例子:如果你发起了一个 Ajax 请求然后用户导航到了另一个路由,显然,你这个请求如果还没有完成就应该被取消,而不应该发出去。...它接收任意多个参数,参数可以是任意类型,然后它会把这些参数逐个放入流中。 from - 数组转为流 ? 它接受一个数组型参数,数组中可以有任意数据,然后把数组的每个元素逐个放入流中。...而当你用过 Rx 大家族中的任何一个成员时,RxJS 对你几乎是免费的,反之也一样。 唯一的问题,就是找机会实践,并体会 FRP 风格的独特之处,获得那些超乎具体技术之上的真知灼见。 ----

1.9K20

使用AJAX获取Django后端数据

发出请求后,视图返回请求的数据,然后需要将响应转换为JSON,然后才能将其用于其他操作。...第一个.then接收已解析的响应并将其转换为JSON。第二个.then允许我们访问第一个.then返回的数据,并允许我们使用它,然后可以处理这个数据,比如进行更新页面操作。...我们从POST请求获得的响应将像GET请求一样使用链式承诺进行处理。 在视图中处理POST请求 接受POST请求的视图将从请求中获取数据,对其执行一些操作,然后返回响应。...一旦获得请求中的数据,我们就可以执行用户希望启动AJAX请求的操作。这可能是创建模型的实例或更新现有实例。 与GET请求一样,可以使用JsonResponse和带有数据的字典将数据发送回页面。...这可以是的或更新的模型对象,也可以是成功消息。 确保请求AJAX 在大多数情况下,都会发出AJAX请求,因为我们只希望更新页面的一部分,并且需要获取数据来进行更新。

7.5K40

Rxjs 响应式编程-第一章:响应式

然后我们将创建一个Observable,看看响应式思维和RxJS是怎么样改善现有技术,让你成为更快乐,更多高效的程序员。 什么是响应式? 让我们从一个小的响应性RxJS程序开始。...“ RxJS是基于推送的,因此事件源(Observable)将推动值给消费者(观察者),消费者却不能去主动请求新值。 更简单地说,Observable是一个随着时间的推移可以使用其数据的序列。...如果HTTP GET请求成功,我们emit它的内容并结束序列(我们的Observable只会发出一个结果)。 否则,我们会emit一个错误。在最后一行,我们传入一个url进行调用。...这将创建Observable,但它不会发出任何请求。这很重要:Observable在至少有一个观察者描述它们之前不会做任何事情。...对于像Ajax请求这样的常见操作,通常有一个Operator可供我们使用。 在这种情况下,RxJS DOM库提供了几种从DOM相关源创建Observable的方法。

2.2K40

请简述跨域的几种方式

如果你当前 A网站还存在登录态,那么对方就可以通过 Ajax获得你的任何信息。当然跨域并不能完全阻止CSRF。 *然后我们来考虑一个问题,请求跨域了,那么请求到底发出去没有?...* 复制代码 请求必然是发出去了,但是浏览器拦截了响应。你可能会疑问明明通过表单的方式可以发起跨域请求,为什么 Ajax 就不会。...因为归根结底,跨域是为了阻止用户读取到另一个域名下的内容,Ajax 可以获取响应,浏览器认为这不安全,所以拦截了响应。但是表单并不会获取的内容,所以可以发起跨域请求。...在开发中可能会遇到多个 JSONP 请求的回调函数名是相同的,这时候就需要自己封装一个 JSONP,以下是简单实现 function jsonp(url, jsonpCallback, success)...以 Ajax 为例,当满足以下条件时,会触发简单请求 使用下列方法之一: GET HEAD POST Content-Type 的值仅限于下列三者之一: text/plain multipart/form-data

51520

《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin )《Kotlin 反应式编程》使用

在这里我们对 OkHttp 做一下简单的封装,实现一个类似 jquery 中的 Ajax 的 http 请求的DSL。...OkHttp 是一个成熟且强大的网络库,在Android源码中已经使用OkHttp替代原先的HttpURLConnection。...一个语言列表如下所示: Rx 支持的编程语言 项目主页 Java RxJava : https://github.com/ReactiveX/RxJava JavaScript RxJS:https:/...使用 RxKotlin 完成请求响应的异步处理 我们首先新建一个数据发射源:一个可观察对象(Observable),作为发射数据用 val sender = Observable.create<...然后我们再创建一个数据接收源:一个观察者(Observer) val receiver: Observer = object : Observer {

1.7K20

响应式编程在前端领域的应用

我们可以结合具体场景来介绍下使用,这里会以 Rxjs 来说明。...HTTP 请求与重试基于响应式编程,我们可以很简单地实现一个请求的获取和自动重试:import { ajax } from "rxjs/ajax";import { map, retry, catchError...} from "rxjs/operators";const apiData = ajax("/api/data").pipe( // 可以在 catchError 之前使用 retry 操作符。...其他使用方式除了上面提到的一些 HTTP 请求、用户操作、事件管理等可以使用响应式编程的方式来实现,我们还可以将定时器、数组/可迭代对象变量转换为可观察序列。...timer也就是说,如果我们界面中有个倒计时,就可以以定时器为数据源,订阅该数据流进行响应:// timerOne 在 0 秒时发出一个值,然后每 1 秒发送一次const timerOne = timer

33280

深入浅出 RxJS 之 函数响应式编程

# Hello RxJS 使用 jQuery 实现时间感应用。 <!...流对象中“流淌”的是数据,而通过 subscribe 函数可以添加函数对数据进行操作,上面的代码中,对 holdTime$ 对象有两个 subscribe 调用,一个用来更新 DOM,另一个用来调用...API 请求。...“变”,赋值时是什么值,就会一直保持这些值,代码是一个一个函数,每个函数只是对输入的参数做了响应,然后返回结果。...# 函数响应式编程的优势 RxJS 模型的特点: 数据流抽象了很多现实问题 网页 DOM 的事件,可以看作为数据流 通过 WebSocket 获得的服务器端推送消息可以看作是数据流 通过 AJAX 获得服务器端的数据资源也可以看作是数据流

1.1K10

流动的数据——使用 RxJS 构造复杂单页应用的数据逻辑

从视图的角度看,其实它所面临的是: 得到了一个的任务数据,我要展示它 至于说,这个东西是怎么得到的,是主动查询来的,还是别人推送过来的,并不重要,这不是它的职责,它只管显示。...➤现在和未来 在业务开发中,我们时常遇到这么一种场景: 已过滤排序的列表中加入一条数据,要重新按照这条规则走一遍。 我用一个简单的类比来描述这件事: 每个进教室的同学都可以得到一颗糖。...我们想通了这个事情之后,再反过来考虑刚才这个问题,能得到的结论是: ● 进入本列表的数据都应当经过某种过滤规则和某种排序规则 这才是一个合适的业务抽象,然后再编写代码就是: const final$ =...➤视图如何使用数据流 以上,我们谈及的都是在业务逻辑的角度,如何使用RxJS来组织数据的获取和变更封装,最终,这些东西是需要反映到视图上去的,这里面有些什么有意思的东西呢?...,但可能触发多个引脚对外发送数据。

2.2K60

AJAX中的串行与并行

AJAX的串行 串行特点:只有上一个请求成功,才能执行第下一个,串行中,上一个请求的数据会做下一次请求的依赖。...需求 希望得到日门的语文成绩全世界排名,首先第一次请求获得到他的个人基本信息,然后第二次请求获得他的全部分数列表,最后的第三次请求,获取到日门的语文成绩排名。...如上是基于Jquery的三次请求,可以看到下一个请求里的数据(scoreId)是基于上一个请求的,若将上一个请求改为同步的话,那么就会执行完后,再进行下一个请求,这便是 AJAX 的串行,其实更通俗来讲就是完成上一个...,我们才可以执行下面的操作,也即是一些请求进行并排发出,用异步的话,是不能保证上一个完成,下一个再开始。...AJAX的并行 并行特点:多个请求可以同时发送,但是需要等到所有请求都成功才会做一件事。多个请求之间没有相互依赖。

10910

深入浅出 RxJS 之 创建数据流

请求结果产生数据流 ajax 延迟产生数据流 defer 所谓创建类操作符,就是一些能够创造出一个 Observable 对象的方法,所谓“创造”,并不只是说返回一个 Observable 对象,因为任何一个操作符都会返回...适合使用 of 的场合是已知不多的几个数据,想要把这些数据用 Observable 对象来封装,然后就可以利用 RxJS 强大的数据管道功能来处理,而且,也不需要这些数据的处理要有时间间隔,这就用得上...for 循环产生的数据集合,那么搬到 RxJS 的世界,就适合于使用 generate 来产生一个 Observable 对象。...在 RxJS 中,每个操作符都尽量功能精简,所以 interval 并没有参数用来定制数据序列的起始值,要解决复杂问题,应该用多个操作符的组合,而不是让一个操作符的功能无限膨胀。...用一个 Observable 对象来控制另一个 Observable 对象中数据的产生,这是 RxJS 中的一个常见模式。

2.3K10

翻译 | 如何将 Ajax 与 Django 应用整合在一起?

打个比方,我是否可直接使用带有 Ajax 的 HttpResponse,还是说我的请求响应必须因为 Ajax使用做出改变? 若是如此,请提供一个示例,说明请求的响应必须做出怎样的变化?...现在来谈谈 AJAX . AJAX 的调用就是执行异步 (asynchronous) 请求的客户端代码. 听起来很高大上,说人话就是它在后台执行客户端的请求然后处理响应....调用会转到网址 127.0.0.1:8000/hello, 和你切换到标签完成该请求一样....如果失败,则执行另一个函数. 那么现在这里会发生什么? 没错, 你会收到一个 “hello world” 的弹出提示. 如果你用 Ajax 调用 home 请求呢?...就像我提到的,AJAX 调用会获取响应,就像用户自己完成的一样. 假设你不想搞乱所有的 html,只是想发送数据 (也许是一个对象列表).

1.3K30

RxJS 处理多个Http请求

有时候进入某个页面时,我们需要从多个 API 获取数据然后进行页面显示。管理多个异步数据请求会比较困难,但我们可以借助 Angular Http 服务和 RxJS 库提供的功能来实现上述的功能。...处理多个请求有多种方式,使用串行或并行的方式。 基础知识 mergeMap mergeMap 操作符用于从内部的 Observable 对象中获取值,然后返回给父级流对象。...即我们在需要在上一个请求的回调函数中获取相应数据,然后在发起另一个 HTTP 请求。...最后我们来看一下如何处理多个并行的 Http 请求。 forkJoin 接下来的示例,我们将使用 forkJoin 操作符。...forkJoin 操作符接收一个 Observable 对象列表然后并行地执行它们。

5.7K20

auto-comet服务器端向客户端的自动发送

使用 AJAX 实现“服务器推”与传统的 AJAX 应用不同之处在于:   服务器端会阻塞请求直到有数据传递或超时才返回。   ...因为这种方案基于 AJAX,具有以下一些优点:请求异步发出;无须安装插件;IE、Mozilla FireFox 都支持 AJAX。   ...在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高 并发处理速度。...接下来是长连接 长连接 所谓长连接,指在一个连接上可以连续发送多个数据包,然后断开连接,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。...一个servelt容器可以提供多个comet服务。服务不与session绑定,同一个浏览器可以同时访问多个相同或不同的服务。

3.1K60

RxJS速成 (下)

从Subject内部来讲, subscribe动作并没有调用一个的执行来传递值, 它只是把Observer注册到一个列表里, 就像其他库的AddListener一样....作为Observer, 它是一个拥有next(), error(), complete()方法的对象, 调用next(value)就会为Subject提供一个的值, 然后就会多播到注册到这个Subject...它有这些好处: 不必编写嵌套的subscribe() 把每个observable发出来的值转换成另一个observable 自动订阅内部的observable并且把它们(可能)交错的合成一排. ?...例子:  // 立即发出值, 然后每5秒发出值 const source = Rx.Observable.timer(0, 5000); // 当 source 发出值时切换到的内部 observable..., 如果前一次请求在2秒内没有返回的话, 那么就取消前一次请求, 不再需要前一次请求的结果了, 这里就应该使用debounceTime配合switchMap. mergeMap vs switchMap

2.1K40

Django数据库查询优化与AJAX

,特点:按步骤查询多张表,然后将查询结果封装到对象中,给用户的感觉好像还是连表操作,括号内支持传多个外键字段,每放一个外键字段就会多走一条SQL语句,多查一张表。...AJAX 不是的编程语言,而是一种使用现有标准的新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。...同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求; 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。...AJAX的应用场景 搜索引擎根据用户输入的关键字,自动提示检索关键字,网站注册时候的实时用户名的查重,特点: 不刷新页面的前后端数据交互 异步操作,当请求发出后,浏览器还可以进行其他操作 AJAX前的知识储备...0拿到标签对象即$('#d2')[0],然后使用files方法获取文件数据 $.ajax({ url:'', type:'post',

2.4K20
领券