AsyncSubject

最后,我们将看到另一个类型的 Subject -- AsyncSubject,观察了 AsyncSubject 的 Observer,只会在 AsyncSubject 完成时才能观测到值:

类型 特点
ReplaySubject 无论是否完成,能够重现指定数目的值
BehaviorSubject 在完成前,总能够反映最后一次值
AsyncSubject 在完成时,能够反映最后一次值
const subject = new Rx.BehaviorSubject(0);

const observerA = {
  next: x => console.log(`A next ${x}`),
  error: e => console.error(`A error ${e}`),
  complete: () => console.log('A done')
};

subject.subscribe(observerA);
console.log('observerA subscribed');

const observerB = {
  next: x => console.log(`B next ${x}`),
  error: e => console.error(`B error ${e}`),
  complete: () => console.log('B done')
};

setTimeout(() =>subject.next(1), 100);
setTimeout(() =>subject.next(2), 200);
setTimeout(() =>subject.next(3), 300);

setTimeout(() => {
  subject.subscribe(observerB);
  console.log('observerB subscribed');
}, 400);

/* 程序输出:
  "observerA subscribed"
  "A next 3"
  "A done"
  "B next 3"
  "B done"
  "observerB subscribed"
 */

查看例子

AsyncSubject 就和他的名字一样,类似于同样用来处理异步任务的 Promise。在 Promise 中,我们可以通过 resolve(value) 声明任务完成,并将获得的值发送出去,然后再 Promise.then() 方法中处理得到的值。

results matching ""

    No results matching ""