Ik probeer een vrij simpel dingetje op te zetten met Reactive Extensions in TypeScript. Ik heb eigenlijk dit gevolgd: https://github.com/Reactive-Extensions/rxjs-jquery
Het stukje waar wordt gesubscribet (na de flatMapLatest) gaat iets raar. Het voorbeeld suggereert dat de eerste paramater in de eerste functie in subscribe gewoon de data is. Als ik echter in VS kijk naar het type is het een Observable.
In code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
| function createAsyncRequest(text: string) { return $.ajaxAsObservable({}); } var throttledSearch = $('#searchBox') .onAsObservable('keyup') // Rx.Observable<BaseJQueryEventObject> .map((ev) => $(ev.target).val()) // Rx.Observable<any> .throttle(500) // Rx.Observable<any> .distinctUntilChanged(); // Nog steeds Rx.Observable<any> // Nu krijgen we het rare: var search = throttledSearch.flatMapLatest((text) -> createAsyncRequest(text)); // Rx.Observable<Rx.Observable<RxJQueryAjaxResult<{}>> var subscription = search.subscribe((data) => /* data: Rx.Observable<RxJQueryAjaxResult> */, (error) => {}); |
Volgens de documentatie van de TS definition is search dus een dubbele Observable. Volgens het commentaar bij de originele Rx-files ook:
Je zou het ook verwachten, je hebt een Observable ('collection') die je vult met Observables. Echter, IRL is 'data' gewoon het AjaxResult.@returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences and that at any point in time produces the elements of the most recent inner observable sequence that has been received.
Wat gaat hier mis? Om het te laten werken krijg ik nu allerlei fouten in de code (volgens VS), maar ook is het tegenstrijdig met de documentatie.
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI