Если я правильно понимаю ваш вопрос, вы не хотите, чтобы первая часть метода была оценена, пока пользователь не подпишется.Таким образом, если изначально у объекта пользователя был нулевой пароль, тогда для этого объекта был установлен пароль, а затем подписка на наблюдаемое, вы бы хотели, чтобы результатом был результат http.put()
.
InВ приведенном ниже примере пользователь обернут в наблюдаемую область, и остальная часть выполнения канала не будет запущена, пока не будет подписана наблюдаемая.
saveNewUser(user: User): Observable<boolean> {
return of(user).pipe(
switchMap(u => (!u || !u.password) ? of({ ok: false }) : this.http.put(this.saveUrl, u)),
map(res => res.ok)
);
}
Это довольно неловкий способ действий.Во-первых, это просто не сработает, если переданный объект изначально не определен или внешняя ссылка изменена.Гораздо лучше было бы создавать в Observable любые изменения для пользователя и передавать остальную часть логики или просто ждать вызова saveNewUser()
до тех пор, пока не будут установлены данные.