Как реорганизовать подписку внутри подписки в rxjs - PullRequest
0 голосов
/ 01 октября 2018

Например:

this.saveSubscription$ = this.ds.onSave$.subscribe(x => 
  this.sb.updateMachineTool(this.viewEditModel.viewEditModel).subscribe(x = {
    console.log('alert results', x)
  })
)

this.ds.onSave$ - это тема, которая срабатывает при нажатии кнопки сохранения на другом компоненте.

this.sb.updateMachineTool - это запись httpClient, которая обновляетконкретный инструмент

я должен использовать карту какого-то типа, чтобы я не подписывался на обе области?

Как я могу изменить этот код?

1 Ответ

0 голосов
/ 01 октября 2018

Для рефакторинга вашего кода Вы можете использовать
mergeMap
switchMap

Ваш вопрос является идеальным вариантом использованиядля switchMap.потому что, как вы упомянули, this.ds.onSave$ - это тема, которая срабатывает при нажатии кнопки сохранения на другом компоненте.
Преимущество switchMap дает вам в этом сценарии то, что она отменит всю старую подписку (Http Call in Progressв вашем случае) автоматически при повторном нажатии кнопки.

ModifiedCode

this.saveSubscription$ = this.ds.onSave$.pipe(switchMap(()=> 
  this.sb.updateMachineTool(this.viewEditModel.viewEditModel)
  )
).subscribe(x = {
    console.log('alert results', x)
  });

Подробнее

  1. Understanding mergeMap and switchMap in RxJS
  2. The Simple Difference Between RxJS switchMap and mergeMap
...