从rxjs可以观察到

时间:2019-03-26 19:00:24

标签: javascript rxjs

根据此主题: What is the difference between Promises and Observables?

许多用户说Observable就像一个流。 我真的很难理解,例如这个端点有多特别:

https://jsonplaceholder.typicode.com/posts

可以随时间返回许多值。 由于它是http请求,因此无论成功还是失败,都将返回单个响应。

3 个答案:

答案 0 :(得分:2)

您是正确的,将http请求与可观察对象一起使用时,它仍然只会返回单个事件。因此,如果您正在执行的唯一异步操作是单个http请求,则使用可观察变量而不是应许变量不会带来任何好处。

当您开始将几个可观察的流组合在一起时,RxJS和可观察的功能将发挥作用。可以使用诸如mergeMap,switchMap,forkJoin,combinateLatest等操作符来完成此操作。当您开始执行此操作时,将http请求作为可观察对象可以得到很多好处。

以轮询为例,创建一个事件流,该事件流每10秒触发一次,然后使用http请求对服务器进行轮询,这是一个使用带有可观察对象的http请求确实很出色的用例。

答案 1 :(得分:1)

当我们想随着时间的推移管理和/或合并多个事件时,可观察的对象很有用。

假设我们有一个方法将为该JSON返回承诺:

.my-toolbar{
    --background: var(--ion-color-primary);
}

此外,假设我们正在跟踪当前页面上的用户状态:

const dataPromise = fetchData('https://jsonplaceholder.typicode.com/posts');

现在让我们为数据获取和用户离开事件绘制时间表。 const userLeavePromise = trackUserPresence(); 代表事件,及时发生:

o

举例来说,数据将在第4秒钟获取,而我们烦躁不安的用户将在第3秒钟离开页面。在这种情况下,我们要取消获取操作和所有后​​处理回调(以Promise的话,所有 1s 2s 3s 4s 5s data ------------o userLeave --------o -ned函数)。

对于这种情况(以及更多情况),RxJS提供了许多运算符,这些运算符使我们可以随时间组合事件。

在这种情况下,我们将获取数据,直到用户离开页面:

.then

答案 2 :(得分:1)

将HTTP请求与Promise和Observable进行比较并没有太大区别,因为Observable一旦完成请求就完成,因此它不是长寿的Observable。但是,每次您单击该按钮时,都会发出以下提示。

const { fromEvent } = rxjs;

fromEvent(document.getElementById('clickMe'), 'click').subscribe(() => { 
  console.log('clicked button');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.4.0/rxjs.umd.min.js"></script>
<button id="clickMe">Click me</button>