【问题标题】:Using RxJs ConcatMap don't send a value of null or empty string使用 RxJs ConcatMap 不要发送 null 值或空字符串
【发布时间】:2020-06-10 14:25:35
【问题描述】:

我正在使用 RxJs concatMap 来控制我的应用程序中某些数据的保存。

this.myService.saveData(this.updatedData)
  .pipe(
    tap(data1Res => this.onData1Success(data1Res)),
    concatMap(() => this.myService.saveOne(this.OneData)),
    tap(data2Res => this.onData2Success(data2Res)),
    concatMap(() => this.myService.saveTwo(this.TwoData)),
    tap(data3Res => this.onData3Success(data3Res)),
    concatMap(() => this.myService.saveThree(this.ThreeData)),
    tap(data4Res => this.onData4Success(data4Res)),
    concatMap(() => this.myService.saveFour(this.FourData)),
  )
  .subscribe(
    res => this.onSaveSuccess(), // Reload values
    err => console.log('error while saving', err) // Save to file or db
  );

目前这可行,但即使说“this.OneData”为空或为空,它也会执行...我怎样才能让它不发送本质上的 NoOpp 请求?

【问题讨论】:

  • 您可以使用 filter(r => r !== null ) 过滤空值或其他任何内容
  • 感谢您的回复,那么调用会是什么样子...concatMap(filter(() => this.myService.saveOne(this.OneData) !== null))

标签: angular rxjs rxjs5 rxjs6 rxjs-observables


【解决方案1】:
this.myService.saveData(this.updatedData)
  .pipe(
    tap(data1Res => this.onData1Success(data1Res)),
    concatMap(() => this.myService.saveOne(this.OneData)),
    filter(res => res !== null),
    tap(data2Res => this.onData2Success(data2Res)),
    ...

  )
  .subscribe(
    res => this.onSaveSuccess(), // Reload values
    err => console.log('error while saving', err) // Save to file or db
  );

【讨论】:

  • 感谢Cenk 的回复...所以如果“this.OneData”为Null,这将不会调用“saveOne”?
  • 如果 saveOne 的 res 为 null 则不会调用其他的。当值为 false 时,过滤器会破坏管道。
  • 好的,如果我希望执行“saveTwo”和“saveFour”,因为“this.TwoData”和“this.FourData”已填充,但我不希望其他人执行,因为它们是未填充...听起来不像“过滤器”可以解决这个问题。
  • 其实这个管道使用效率不高,完全不明白你在做什么。
  • 它的用法是按一定的顺序依次调用api,避免嵌套.subscribes...所以效率很高。
【解决方案2】:

过滤器可以这样使用,以确保它在为空或为空时不会运行

this.myService.saveData(this.updatedData)
  .pipe(
    tap(data1Res => this.onData1Success(data1Res)),
    filter(res => res),
    concatMap(() => this.myService.saveOne(this.OneData)),
   ...
  )
  .subscribe(
    res => this.onSaveSuccess(), // Reload values
    err => console.log('error while saving', err) // Save to file or db
  );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多