РЕДАКТИРОВАТЬ: не обращать внимания на этот вопрос (Как вернуть холодную наблюдаемую, прежде чем сделать http-вызов) - PullRequest
0 голосов
/ 08 октября 2018

У меня угловой сервис, примерно такой:

saveNewUser(user: User): Observable<boolean> {
  if (!user || !user.password) {
    return of(false);
  }

  return this.http.put(this.saveUrl, user).pipe(map((res: Response) => res.ok));
}

Я пытаюсь вернуться на return of(false);, только когда потребитель saveNewUser(...) подпишется на него.Другими словами, всегда возвращайте холод, наблюдаемый.

1 Ответ

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

Если я правильно понимаю ваш вопрос, вы не хотите, чтобы первая часть метода была оценена, пока пользователь не подпишется.Таким образом, если изначально у объекта пользователя был нулевой пароль, тогда для этого объекта был установлен пароль, а затем подписка на наблюдаемое, вы бы хотели, чтобы результатом был результат 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() до тех пор, пока не будут установлены данные.

...