[英]Can I safely replace .takeUntil(Observable.timer(0)) with .take(1)?
[英]Can i convert setTimeout method to observable.timer?
聽說我正在迭代數組,我希望每2秒運行一次這個循環。
let Array = [1,2,3,4,5,6]
for (i = 0; i < Array.length; i++) {
setTimeout((item)=>{
//business logic
console.log("item", item);
}, 2000 * i, Array[i]);
}
如何在observable.timer方法中轉換此代碼?
這應該工作:
let Array = [1,2,3,4,5,6] rxjs.interval(2000) .pipe( rxjs.operators.take(Array.length), rxjs.operators.map(i => Array[i]) ).subscribe(value => console.log(value));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.min.js"></script>
它會在Array.length
項( take
)之后自動結束並生成subscribe( map
)中的項而不是它們的索引。
RxJS v5版本:
let Array = [1,2,3,4,5,6] Rx.Observable.interval(2000) .take(Array.length) .map(i => Array[i]) .subscribe(value => console.log(value));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.12/Rx.min.js"></script>
干得好,應該有一個帶有rxjs 6.x的es6版本:
import { interval } from 'rxjs';
import { take, map } from 'rxjs/operators';
const array = [2, 3, 4, 5, 6];
interval(2000)
.pipe(take(array.length))
.pipe(map(i => array[i]))
.subscribe(
val => console.log(val)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.