Last active
April 29, 2019 03:54
-
-
Save new08/c2403ca8e91234af2a4feb922711045d to your computer and use it in GitHub Desktop.
RxJS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 在订阅 subject 时,已经执行过的 subject.next() 是不会接收到的。 | |
| // 如果希望接收到之前的事件,可以使用 subject 的变体 —— | |
| // AsyncSubject 会在 subject 结束后送出最后一次的值。 | |
| var source = Rx.Observable.create(function(observer) { | |
| setTimeout(function() { | |
| console.log('posting'); | |
| observer.next('success'); | |
| observer.complete(); | |
| },1000) | |
| }); | |
| var subject = new Rx.AsyncSubject(); | |
| var observerA = { | |
| next: value => console.log('A next: ' + value), | |
| error: error => console.log('A error: ' + error), | |
| complete: () => console.log('A complete!') | |
| } | |
| var observerB = { | |
| next: value => console.log('B next: ' + value), | |
| error: error => console.log('B error: ' + error), | |
| complete: () => console.log('B complete!') | |
| } | |
| subject.subscribe(observerA); | |
| source.subscribe(subject); | |
| setTimeout(() => { | |
| subject.subscribe(observerB); | |
| },3000) | |
| /* >>> | |
| "posting" | |
| "A next: success" | |
| "B next: success" | |
| "A complete!" | |
| "B complete!" | |
| */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 直接订阅 observer 时,每个 observer 都是分开执行的。 | |
| // 如果不希望 observer 重复执行,可以通过 subject 订阅 observer, | |
| // 这种也称为组播(multicast) | |
| var source = Rx.Observable.create(function(observer) { | |
| setTimeout(function() { | |
| console.log('posting'); | |
| observer.next('success'); | |
| observer.complete(); | |
| },1000) | |
| }); | |
| var observerA = { | |
| next: value => console.log('A next: ' + value), | |
| error: error => console.log('A error: ' + error), | |
| complete: () => console.log('A complete!') | |
| } | |
| var observerB = { | |
| next: value => console.log('B next: ' + value), | |
| error: error => console.log('B error: ' + error), | |
| complete: () => console.log('B complete!') | |
| } | |
| console.log('starting'); | |
| var subject = new Rx.Subject() | |
| subject.subscribe(observerA) | |
| subject.subscribe(observerB); | |
| source.subscribe(subject); | |
| /* >>> | |
| "starting" | |
| "posting" | |
| "A next: success" | |
| "B next: success" | |
| "A complete!" | |
| "B complete!" | |
| */ |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
subject 有三种变体
Subject, BehaviorSubject, ReplaySubject, AsyncSubject