代码之家  ›  专栏  ›  技术社区  ›  leonormes

来自JS映射的RXJS的类生成器流

  •  1
  • leonormes  · 技术社区  · 6 年前

    我创造了一个 new Map() 哪个是 <string, string> . 我创造了一个 Rx.Observable 从它开始。 Rx.from(Map) . 假设它有5个条目。

    我希望能够一次按需使用条目1。所以我取第一个条目,它是一个字符串,并将其作为消息发送。我等待答复,如果答复是 OK 我拿第二个条目并发送它,依此类推。

    const source: Rx.Observable<[string, string]> = Rx.from(myMap);
    
    function handleSending(): void {
        source.pipe(map((x: any) => x.join(''))).subscribe((x: string) => client.write(x));
    }
    

    这个实现在一个连续的流中提取所有条目,我想在其中提取一个条目并等待。我认为我需要的是生成器的功能,但我不确定如何在RXJS中实现这一点。

    1 回复  |  直到 6 年前
        1
  •  2
  •   martin    6 年前

    我没有测试,但是 bindNodeCallback 方法,它包装一个节点的函数并返回另一个返回可观测值的函数。然后 concatMap 在当前内部可观察项完成之前不会处理新项。

    因此,在您的用例中,您可以使用以下示例:

    const obsWrite = bindNodeCallback(client.write);
    
    source
      .pipe(
        map((x: any) => x.join('')),
        concatMap((x: string) => obsWrite(x))
      )
      .subscribe();
    
    推荐文章