Использование RxJs ConcatMap не отправляет значение нулевой или пустой строки

Я использую 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?


person Funn_Bobby    schedule 26.02.2020    source источник
comment
вы можете использовать фильтр (r = ›r! == null) для фильтрации нулей или чего-либо еще   -  person Barkha    schedule 26.02.2020
comment
Спасибо за ответ, так как бы в точности выглядел вызов ... concatMap (filter (() = ›this.myService.saveOne (this.OneData)! == null))   -  person Funn_Bobby    schedule 26.02.2020


Ответы (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
  );
person Barkha    schedule 27.02.2020

person    schedule
comment
Спасибо за ответ, Дженк ... Значит, это не вызовет saveOne, если this.OneData имеет значение Null? - person Funn_Bobby; 26.02.2020
comment
Если res saveOne равен нулю, остальные не вызываются. Фильтр разрывает трубу, когда значение ложно. - person Cenk Çetinkaya; 26.02.2020
comment
Хорошо, что, если я хочу, чтобы saveTwo и saveFour выполнялись, потому что this.TwoData и this.FourData заполнены, но я не хочу, чтобы другие выполнялись, потому что они не заполнены ... не похоже, что фильтр будет работать для этого. - person Funn_Bobby; 26.02.2020
comment
На самом деле это использование трубы неэффективно, я не понимаю, что вы полностью делаете. - person Cenk Çetinkaya; 26.02.2020
comment
Его использование состоит в том, чтобы вызывать api в определенном порядке один за другим, чтобы избежать вложенных .subscribes ... так что это довольно эффективно. - person Funn_Bobby; 26.02.2020