В NGRX сам магазин - это просто BehaviorSubject
.
Когда новое значение отправляется в BehaviorSubjet
, все обратные вызовы будут вызываться на одном и том же тике, поэтому в основном это синхронно . Конечно, если вы применили перед обратным вызовом delay
для ex, тогда он стал бы асинхронным.
Тем не менее, я бы не советовал вам использовать магазин таким образом, и я просто переписал бы ваш код следующим образом:
this.demoService.userIDs$.pipe(
first(),
tap(userIDs => console.log({ userIDs })),
mergeMap(userIDs => this.http.post<string[]>(url, { ids: userids }))
);
Таким образом, вам все равно, синхронный он или асинхронный.
Вы просто храните весь источник данных в одном потоке.
Это также безопаснее, потому что если при вызове этого потока позже в вашем приложении, у вас будет возможность отменить его (с switchMap
).
Также обратите внимание на использование first
, потому что в вашем случае вы держите поток userIDs$
открытым (что, я считаю, в этом случае будет утечкой памяти).