Angular http post не запускается

У меня возникли проблемы при выполнении простого вызова из моего приложения NG на мой ASP.NET Core WebAPI. Код следующий:

  this.http.post(actionUrl, credentialsDto)
  .map((data: Response) => {
    if (data !== null) {
      localStorage.setItem(this.tokenStorageKey, JSON.stringify(data));
    }
});

Я попытался зарегистрировать свой параметр обратного вызова «data», но добавление вызова console.log () в моем операторе if ни к чему не привело (это означает, что у меня вообще нет вывода на консоль). Между тем, если я добавляю вызов console.log () до или после вызова, но в той же функции, они отлично выполняются.

Кто-нибудь знает, что здесь происходит? Я новичок в JS, так что не вините меня. Я использую собственный HTTP-клиент в Angular 5.

Заранее спасибо.

0
0
549
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам также необходимо подписаться на Observable. Observable не сработает, если вы не подписались на него.

this.http.post(actionUrl, credentialsDto)
         .map((data: Response) => {
               if (data !== null) {
                  localStorage.setItem(this.tokenStorageKey, JSON.stringify(data));
               }

               return response;
          }).subscribe(response => /* something here */).

Начиная с RxJS 5.5 вы не можете использовать оператор map, как вы это делали. Вам нужно использовать его внутри функции pipe.

RxJS 5.5 и выше подход

this.http.post(actionUrl, credentialsDto)
         .pipe(map((data: Response) => {
               if (data !== null) {
                  localStorage.setItem(this.tokenStorageKey, JSON.stringify(data));
               }

               return response;
          })).subscribe(response => /* something here */).

При таком подходе, что мне делать с локальным хранилищем - в подписке или в функции карты? Есть ли смысл просто заменить мою карту подпиской?

mororo 10.08.2018 15:01

Это зависит от вашей логики. Если вы не меняете ответ, вы можете заменить map на tap.

Suren Srapyan 10.08.2018 15:02

По сути, моя логика состоит в том, чтобы хранить токен, полученный с сервера, в локальном хранилище. Вот и все.

mororo 10.08.2018 15:03

Так что посмотрите на оператор tap, если вы используете выше 5.5, иначе посмотрите на оператор do

Suren Srapyan 10.08.2018 15:03

Извините, но я использую версию 5.5.7, и в ней нет оператора «тап». В сети я обнаружил, что это доступно только для версии 6 или выше. Также "делать" тоже не работает. Следует ли мне также использовать в конце «подписку», как это делали вы?

mororo 10.08.2018 15:09

Да, подписка обязательна. tap должен быть там. github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators‌ .md

Suren Srapyan 10.08.2018 15:10

Я попробую с подпиской, но вот что я нашел об операторе касания: НАЖМИТЕ

mororo 10.08.2018 15:11

Вы использовали tap с функцией pipe?

Suren Srapyan 10.08.2018 15:12

Нет, я пытаюсь использовать его как оператор, насколько я понимаю. С "DO" я получаю эту ошибку "TypeError: this.http.post (...). Do не является функцией в AuthenticationService.login"

mororo 10.08.2018 15:13

Поэтому, используя более высокий 5.5, вам нужно использовать pipe.

Suren Srapyan 10.08.2018 15:14

Другие вопросы по теме