亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何僅緩沖來自可觀察源的選定項目集并立即發出其他項目?

如何僅緩沖來自可觀察源的選定項目集并立即發出其他項目?

守候你守候我 2021-12-12 09:46:18
例如,我有一個每秒發出一個數字的 observable。我想將它們緩沖到數組中 4 秒。但是當源發出一個可以被 5 整除的數字時,我想立即發出它而不是緩沖它。// emit value in sequence every 1 second// 0,1,2,3,4,5...const source = interval(1000);// buffer values for 4 secondsconst buffered = source.pipe(  buffer(interval(4000)),  filter(x => x.length > 0)  );const subscribe = buffered.subscribe(val => console.log(val));我的預期結果是:[0,1,2,3] // buffered and emitted after 4 seconds[5] // emitted immediately[4,6,7,8] // buffered and emitted after 4 seconds[10] // emitted immediately[9,11,12,13]// ... and so onStackblitz:https ://stackblitz.com/edit/typescript-cdvc2d ? file = index.ts
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

擁有兩個具有兩種不同職責的可觀察對象,然后將它們合并在一起怎么樣?


const source = interval(1000);


// buffer values for 4 seconds

const buffered = source.pipe(

  buffer(interval(4000)),

  filter(x => x.length > 0)  

);


const multipleOfFive = source.pipe(

  filter(x => x % 5 === 0)

);


const subscribe = merge(buffered, multipleOfFive).subscribe(val => console.log(val));

我不確定您是否還想過濾第一個 observable 中 5 的倍數,但這很容易做到。


查看完整回答
反對 回復 2021-12-12
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

您可以使用multicast將源流拆分為兩個,然后使用不同的filter運算符將它們再次合并。


import { of, interval, Subject, merge } from 'rxjs';

import { bufferTime, multicast, filter } from 'rxjs/operators';


const buffered = source.pipe(

  multicast(new Subject(), s => merge(

    s.pipe(

      filter((value: number) => value % 5 === 0),

    ),

    s.pipe(

      filter((value: number) => value % 5 !== 0),

      bufferTime(4000),

    ),

  ))

);

你更新的演示:https : //stackblitz.com/edit/typescript-sbhn8s?file=index.ts


查看完整回答
反對 回復 2021-12-12
  • 2 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號