Я хочу выполнить остальные запросы по порядку, используя switchMap (...) из RxJs.
Объект:
export class Transaction {
constructor(
public id: string,
public unique_id: string,
public name: string,
public status: string,
public type: string,
public created_at: Date
) {}
}
Компонент:
@Component({
selector: 'app-transaction-details',
templateUrl: './transaction-details.component.html',
styleUrls: ['./transaction-details.component.scss']
})
export class TransactionDetailsComponent implements OnInit {
processingLogs: ProcessingLogs = new ProcessingLogs(null, null, null, null, null);
transaction: Transaction;
constructor(private transactionService: TransactionService,
private processingLogsService: ProcessingLogsService,
private route: ActivatedRoute) { }
ngOnInit() {
this.route.params.pipe(
flatMap(params => {
if(params['id']) {
return this.transactionService.get(params['id']);
} else {
return of(null);
}
})
).subscribe(value => {
if(value != null) {
this.transaction = value;
}
});
this.route.params.pipe(
flatMap(params => {
if (transaction.unique_id) {
return this.processingLogsService.getProcessingLogsList(transaction.unique_id);
} else {
return of(null);
}
})
).subscribe(value => {
if (value != null) {
this.processingLogs = value;
}
});
}
}
Я пробовал это:
this.route.params.pipe(
tap( params => {
if(params['id']) {
return this.transactionService.get(params['id']);
} else {
return of(null);
}
}),
switchMap( value => this.processingLogsService.getProcessingLogsList(value.unique_id) )
)
Сначала я хотел бы загрузить transactionService.get(params['id'])
используя id
по ссылке http.Во-вторых, когда загружен объект Transaction
, я бы хотел загрузить getProcessingLogsList(transaction.unique_id)
, используя unique_id
, загруженный из первого запроса.Я получаю несколько ошибок с моей попыткой кода.Я получаю пустой результат при запуске кода.
РЕДАКТИРОВАТЬ: Я проверял это, но данные на странице пустые:
const transactionService = (x) => of(`transaction ${x}`);
const processLog = (x) => of(`logged ${x}`);
this.route.params.pipe(
switchMap(x=> transactionService(x).pipe(
switchMap(x=>processLog(x))
))
).subscribe(x=>console.log(x));