【问题标题】:How to delay in result of group by如何延迟分组结果
【发布时间】:2019-04-27 01:55:57
【问题描述】:

我如何一次获取单个项目 (concatMerge) 并从 group.pipe(toArray()) 的结果中延迟它。我希望每个项目从组数组中出来,并在该组项目内延迟。

const people = [
  { name: 'Sue', age: 25 },
  { name: 'Joe', age: 30 },
  { name: 'Frank', age: 25 },
  { name: 'Sarah', age: 35 }
];

from(people).pipe(
  groupBy(person => person.age, p => p.name),
  mergeMap(group => zip(of(group.key), group.pipe(toArray())))
).subscribe(console.log);

【问题讨论】:

    标签: rxjs rxjs5 rxjs6


    【解决方案1】:

    您可以使用setTimeout 命令安排操作

    setTimeout (() => {
         console.log("Hello from setTimeout");
      }, 1000);
    

    或退订:

    // Stop listening for location after 10 seconds
    setTimeout(() => { locationsSubscription.unsubscribe(); }, 10000);
    

    或再次订阅:

    // After 1/2 second, subscribe again.
    setTimeout(() => {
      sequence.subscribe({
        next(num) { console.log('2nd subscribe: ' + num); },
        complete() { console.log('2nd sequence finished.'); }
      });
    }, 500);
    

    或延迟console.log:

    setTimeout (() => {
         console.log("Hello from setTimeout");
      }, 1000);
    

    【讨论】:

      【解决方案2】:

      使用`delay()

      from(people).pipe(
        groupBy(person => person.age, p => p.name),
        concatMap(group => zip(of(group.key), group.pipe(toArray())).pipe(delay(2000)))
      ).subscribe(console.log);
      

      https://stackblitz.com/edit/rxjs-groupby-key-vals-s8nsjq?file=index.ts

      【讨论】:

      • 为什么返回空数组?我如何根据数组内的时间值延迟
      • 更新了答案,如果它是连续流,我认为基于动态时间值延迟是没有意义的。时间值将是映射到键的常量。您可以使用单独的对象来存储这种关系。
      猜你喜欢
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多