У меня есть вызов API больше, чем один раз, но я хочу запускать ajax только один раз в Angular 6 - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть панель инструментов с добавлением динамических виджетов. Если пользователь добавляет два виджета с одинаковым вызовом API, он, очевидно, ударил два вызова Ajax.Как я могу убедиться, что если API вызывается один раз, второй вызов получит результат первого

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете использовать оператор shareReplay.Он кэширует результаты и отправляет их новым подписчикам без повторного создания потока.

import { ajax } from 'rxjs/ajax';
import { tap, map, shareReplay } from 'rxjs/operators';

const endpoint = 'https://api.github.com/users?per_page=1'

const obs$ = ajax.getJSON(endpoint).pipe(
  tap(() => console.log('Making BE call')),
  shareReplay(1)
);

obs$.subscribe(x => console.log('[1]', x));
obs$.subscribe(x => console.log('[2]', x));

// Output:
// Making BE call
// [1] object
// [2] object

Вы можете взглянуть на эту небольшую демонстрацию: https://stackblitz.com/edit/rxjs-eyk9y5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...