Как я могу вернуть значение из обещания в ионном - PullRequest
0 голосов
/ 04 апреля 2020

У меня проблемы с получением значений из ответного http-ответа - я пытаюсь использовать Promise для получения данных из веб-службы, но при предварительном просмотре в консоли появляется сообщение undefined.

В теле ответа это вот что было возвращено:

{"data":[{
     "loginStatus":"Valid",
     "CustomerName":"Fagbemi Ayodele",
     "Mobile":null,
     "Email":"fagbemiayodele48@gmail.com",
     "CustomerID":"3"
   }]}

auth-service.ts

login(credentials) {
  return new Promise((resolve, reject) => {
      this.http.post(apiUrl + '/login.php', JSON.stringify(credentials))
        .subscribe(res => {
          resolve(res.json());

        }, (err) => {
          reject(err);
        });
    });

  }

login.ts

this.authService.login(this.loginData).then((result) => {
        this.data = result['data'];
        console.log("Result: "+ this.data.loginStatus);

        if (this.data.loginStatus == 'Valid') {
          localStorage.setItem('loginStatus', this.data.loginStatus);
          localStorage.setItem('CustomerName', this.data.CustomerName);
          this.navCtrl.setRoot(MyApp);
          this.loading.dismiss();
        }

        else {
          this.loading.dismiss();
        }
      }, (err) => {
        this.loading.dismiss();
        this.presentToast(err);
      });

Ответы [ 4 ]

0 голосов
/ 26 апреля 2020

Поскольку вы полностью переписали свой вопрос ( История изменений ), мой предыдущий ответ больше не действителен.

Из вашего тела ответа ясно, что свойство объекта ответа data (result['data']) имеет значение array, а не object. Поэтому вы не можете получить доступ к this.data.loginStatus.

Вы должны использовать this.data[0].loginStatus для доступа к статусу входа из вашего ответа API. Кроме того, не забудьте проверить length из data (data.length > 0) перед его использованием.

Надеюсь, это поможет !!

0 голосов
/ 04 апреля 2020

Переменная email является локальной для оператора if. За пределами if оно не будет определено. Либо получите доступ (печать к консоли) в пределах if, либо объявите email вне if - до if

Проверьте здесь скрипку

0 голосов
/ 04 апреля 2020

Пожалуйста, объявите var email=[]; за пределами if блока.

Если вы хотите проверить, объявлена ​​ли желаемая переменная перед ее использованием, попробуйте добавить "use strict"; в качестве первого файла javascript. После добавления "use strict";, если вы попытаетесь использовать переменную, не входящую в область действия, ваш скрипт выдаст исключение. Обратитесь к используйте строгую документацию и scope .

Надеюсь, это поможет.

0 голосов
/ 04 апреля 2020

Консоль выполняется до того, как l oop заканчивается, поэтому она становится пустой. Используйте asyn c -wait для правильного результата.

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