Przykład i wyjaśnienie operatora let
(https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/let.md) nie są jasne. Ktoś ma dobry przykład/wyjaśnienie jak działa operator let
i kiedy powinniśmy go używać?Jak korzystać z operatora Rx.Observable.prototype.let?
Odpowiedz
&tldr;
Jest to funkcja wygoda dla mogąc compartmentalize logiki i wstrzyknąć go do rurociągu.
Longer Wyjaśnienie
source jest prawdopodobnie najbardziej ostateczne wyjaśnienie. Jest to po prostu przekazywanie funkcji, która zostaje wywołana ze źródłem Observable
.
Rx.Observable.prototype.let = function(fn) {
return fn(this);
}
Dzięki temu możemy utworzyć lub wstępnie zdefiniować potok, który chcemy ponownie wykorzystać dla wielu źródeł. Rozważenie wspólnej trop dla Rx, reaktywnej pasku wyszukiwania:
// Listen to a key up event on the search bar
// and emit the value of the search
Rx.Observable.fromEvent(searchBar, 'keyup', e => e.target.value)
// Don't search too eagerly
.filter(text => text.length > 3)
.debounceTime(500)
//Search logic
.flatMap(text => $.getJSON(`my/search/api?q=${text}`))
.flatMap({results} => results)
//Handler
.subscribe(appendToList);
Powyższe powinno dać elementarne poczucie struktury jak rurociąg może zostać utworzony. Gdybyśmy chcieli wypróbować niektóre z tej logiki, aby oczyścić kod lub móc go użyć w innym miejscu, może to być trochę trudne, ponieważ zwykle oznacza to stworzenie nowego operatora (i to ma swoje własne bóle głowy).
Rozwiązaniem jest stosunkowo proste podejście polegające na przeciągnięciu wspólnej logiki do funkcji, która może zostać przekazana jako źródło Observable
i zwróci nową Observable
z zastosowaną logiką.
Więc powyższe może stać:
//Defined in pipelines.js
function filterBuilder(minText, debounceTime) {
return (source) =>
source.filter(text => text.length > minText)
.debounce(debounceTime);
}
function queryBuilder(baseUrl) {
return (source) =>
source.flatMap(text => $.getJSON(`${baseUrl}?q=${text}`))
.flatMap({results} => results);
}
//In your application code
Rx.Observable.fromEvent(searchBar, 'keyup', e => e.target.value)
.let(filterBuilder(3, 500))
.let(queryBuilder('my/search/api'))
.subscribe(appendResults);
- 1. Jak korzystać z operatora inkrementacji w React
- 2. Rxjava Android, jak korzystać z operatora Zip
- 3. Jak korzystać z operatora trójskładnikowego wewnątrz interpolowanego ciągu?
- 4. jak korzystać z odwrotnego C
- 5. Jak korzystać z operatora wyodrębniania (>>) z wektorem <bool>?
- 6. Jak korzystać z polimorfizmu w CUDA
- 7. Jak korzystać z find_module?
- 8. Jak korzystać z RedirectToRoute?
- 9. Jak korzystać z WSDL
- 10. Jak korzystać z kCTSuperscriptAttributeName?
- 11. Jak korzystać z pgdb.executemany?
- 12. Jak korzystać z org.mockito.AdditionalMatchers.gt?
- 13. Jak korzystać z createTransport?
- 14. Jak korzystać z UIRemoteNotificationTypeVoIP?
- 15. Jak korzystać z onResume()?
- 16. Jak korzystać z phantomjs?
- 17. Jak korzystać z Form.ShowDialog?
- 18. jak korzystać z particles.js?
- 19. Jak korzystać z MonadRandom?
- 20. Jak korzystać z ReadWriteLock?
- 21. Jak korzystać z QueryPerformanceCounter?
- 22. Jak korzystać z QTextBlock?
- 23. Jak korzystać z cepstral?
- 24. Jak korzystać z metodyWindowFocusChanged()?
- 25. Jak korzystać z tekstu?
- 26. Jak korzystać z MediaSessionCompat?
- 27. Jak korzystać z navigator.app.exitApp()?
- 28. Jak korzystać z MPI_Type_create_subarray?
- 29. Jak korzystać z Microsoft.Scripting.Hosting?
- 30. Jak korzystać z PackageManager.addPreferredActivity()?
To brzmi jak 'let' jest' 'switchMap' select' jak jest' map'. Jednak 'select' to' map', więc w jaki sposób 'let' różni się od' switchMap'? –
@JohnChristopherJones niezupełnie. Po pierwsze, 'select' i' map' są tymi samymi funkcjami, aliasami nawzajem. 'let' oznacza czysto rozdzielenie obaw, umożliwiając zdefiniowanie potoku na podstawie jakiegoś abstrakcyjnego' źródła ', a następnie podłączenie go do konkretnego źródła. – paulpdaniels
Dzięki. Widziałem zarówno "select" i "let" używane w przykładach wzorca selektora w [github.com/ngrx/example-app] i nie całkiem owijałem się wokół niego. Tak więc, w terminach jQuery, 'let' jest dosłownie metodą wywołania łańcuchowego, pozwalającą parametryzować sekcje łańcuchów metod. Lub, aby porównać go z 'switchMap', funkcje, które przekazujesz, muszą zwracać Observables, ale' switchMap' odbiera elementy stream i 'let' otrzymuje sam strumień. –