RXJS 7-可观察,观察者和订阅
#javascript #网络开发人员 #angular #rxjs

这是我的详细说明,来自Jurek Wozniak创建的奇妙课程,称为RxJS 7 and Observables: Introduction

要了解该概念,请考虑自己购买课程,这些笔记只是子公司

练习:可观察,观察者和订阅

撕裂,完成通知

让我们说我们要在两秒钟后发送完整的通知,并消耗发出的完整通知。

还要在拆解发生时进行一些清理。我们该怎么做?

import { Observable } from 'rxjs';

const $observable = new Observable((subscriber) => {
  subscriber.next('First');
  setTimeout(() => {
    subscriber.next('After one sec');
  }, 1000);
  setTimeout(() => {
    subscriber.next('After two sec');
    subscriber.complete();
  }, 2020);

  return () => {
    console.log('Teardown');
  };
});

const observer = $observable.subscribe({
  next: (value) => console.log(value),
  complete: () => console.log('Completed'),
});

Image description

我们首次看到,当我们创建一个新的观察值时,我们可以返回一个函数,并且将在拆卸过程中调用此功能。

这确实很方便,因为在此步骤中,我们可以清理逻辑并进行所需的更改。

错误通知

这次让我们看逻辑,当错误发出时会发生什么

import { Observable } from 'rxjs';

const observable$ = new Observable<string>((subscriber) => {
  console.log('Observable executed');
  subscriber.next('Alice');
  subscriber.next('Ben');
  setTimeout(() => {
    subscriber.next('Charlie');
    subscriber.error(new Error('Something went wrong :('));
  }, 2000);

  return () => {
    console.log('Teardown');
  };
});

console.log('Before subscribe');
observable$.subscribe({
  next: (value) => console.log(value),
  complete: () => console.log('Completed'),
  error: (err: Error) => console.log(err.message),
});
console.log('After subscribe');

Image description

退订

让我们创建一个间隔,每2秒发出一个值,然后我们向其订阅7秒,然后使用拆卸功能清洁间隔

import { Observable } from "rxjs";

const interval$ = new Observable<number>(subscriber => {
  let counter = 1;

  const intervalId = setInterval(() => {
    console.log('Emitted', counter);
    subscriber.next(counter++);
  }, 2000);

  return () => {
    clearInterval(intervalId);
  };
});

const subscription = interval$.subscribe(value => console.log(value));

setTimeout(() => {
  console.log('Unsubscribe');
  subscription.unsubscribe();
}, 7000);

Image description

让我们保持联系

嘿,如果您读了这么远,请非常感谢。
我希望您保持联系以获取更多甜蜜的内容。
请在Dev.To和其他频道中订阅(ð°特别twitter)

twitterðhttps://twitter.com/barisbll_dev
LinkedIn - https://www.linkedin.com/in/barisbll-dev/
githubð»ð»https://github.com/barisbll
中ð°https://medium.com/@barisbll