在 Observable 对象内部可以多次调用 next 方法向外发送数据
const observable = new Observable(function (observer) { let index = 0 setInterval(function () { observer.next(index++) }, 1000)})const observer = { next: function (value) { console.log(value) }}observable.subscribe(observer)
当所有数据发送完成以后,可以调用 complete 方法终止数据发送
const observable = new Observable(function (observer) { let index = 0 let timer = setInterval(function () { observer.next(index++) if (index === 3) { observer.complete() clearInterval(timer) } }, 1000)})const observer = { next: function (value) { console.log(value) }, complete: function () { console.log("数据发送完成") }}observable.subscribe(observer)
当 Observable 内部逻辑发生错误时,可以调用 error 方法将失败信息发送给订阅者,Observable 终止
import { Observable } from "rxjs"const observable = new Observable(function (observer) { let index = 0 let timer = setInterval(function () { observer.next(index++) if (index === 3) { observer.error("发生错误") clearInterval(timer) } }, 1000)})const observer = { next: function (value) { console.log(value) }, error: function (error) { console.log(error) }}observable.subscribe(observer)
可观察对象是惰性的,只有被订阅后才会执行,只有订阅它,它才执行
const observable = new Observable(function () { console.log("Hello RxJS")})// 不订阅它不会执行// observable.subscribe()
可观察对象可以有 n 多订阅者,每次被订阅时都会得到执行
const observable = new Observable(function () { console.log("Hello RxJS")})observable.subscribe()observable.subscribe()observable.subscribe()observable.subscribe()observable.subscribe()
取消订阅
import { interval } from "rxjs"const obs = interval(1000)const subscription = obs.subscribe(console.log)setTimeout(function () { subscription.unsubscribe()}, 2000)