W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
可觀察對象可以簡化輸入提示建議的實(shí)現(xiàn)方式。典型的輸入提示要完成一系列獨(dú)立的任務(wù):
完全用 JavaScript 的傳統(tǒng)寫法實(shí)現(xiàn)這個(gè)功能可能需要大量的工作。使用可觀察對象,你可以使用這樣一個(gè) RxJS 操作符的簡單序列:
//Typeahead
import { fromEvent } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';
const searchBox = document.getElementById('search-box');
const typeahead = fromEvent(searchBox, 'input').pipe(
map((e: KeyboardEvent) => (e.target as HTMLInputElement).value),
filter(text => text.length > 2),
debounceTime(10),
distinctUntilChanged(),
switchMap(() => ajax('/api/endpoint'))
);
typeahead.subscribe(data => {
// Handle the data from the API
});
指數(shù)化退避是一種失敗后重試 API 的技巧,它會在每次連續(xù)的失敗之后讓重試時(shí)間逐漸變長,超過最大重試次數(shù)之后就會徹底放棄。 如果使用承諾和其它跟蹤 AJAX 調(diào)用的方法會非常復(fù)雜,而使用可觀察對象,這非常簡單:
//Exponential backoff
import { pipe, range, timer, zip } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { retryWhen, map, mergeMap } from 'rxjs/operators';
function backoff(maxTries, ms) {
return pipe(
retryWhen(attempts => zip(range(1, maxTries), attempts)
.pipe(
map(([i]) => i * i),
mergeMap(i => timer(i * ms))
)
)
);
}
ajax('/api/endpoint')
.pipe(backoff(3, 250))
.subscribe(data => handleData(data));
function handleData(data) {
// ...
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: