【问题标题】:How can I return value from promise in ionic如何从离子中的承诺中返回价值
【发布时间】:2020-04-04 05:10:08
【问题描述】:

我在从返回的 http 响应中获取值时遇到问题 - 我正在尝试使用 Promise 从 Web 服务中获取数据,但是当我在控制台中预览时它显示未定义。

在响应正文中,这是返回的内容:

{"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);
      });

【问题讨论】:

  • 也许你在设置变量之前就在使用它

标签: typescript ionic-framework


【解决方案1】:

请在if 块之外声明var email=[];

如果您想在使用之前检查所需的变量是否已声明,请尝试将"use strict"; 添加为您的 javascript 文件的第一个。添加"use strict"; 后,如果您尝试使用不在范围内的变量,您的脚本将抛出异常。 请参阅use strictscope 文档。

希望这会有所帮助。

【讨论】:

  • 我做了但仍有未定义
  • 你可以粘贴 1. 使用“use strict”后控制台输出 2. 删除敏感内容后的实际代码吗?
【解决方案2】:

您的 email 变量是 if 语句的本地变量。在if 之外,它不会被定义。在if 内访问(打印到控制台),或在if 之外声明email - 在if 之前

查看fiddle here

【讨论】:

  • 仍未定义。
  • @FagbemiAyodele 你确定你的 globalData 中有有效数据吗?检查这个小提琴:jsfiddle.net/2np649xv
【解决方案3】:

由于您已经完全重新连接了您的问题 (Revision History),因此我之前的回答不再有效。

从您的响应正文中,很明显响应对象属性data (result['data']) 是array,而不是object。所以,您无法访问this.data.loginStatus

您应该使用this.data[0].loginStatus 从您的 API 响应中访问登录状态。 另外,使用前不要忘记检查lengthdata (data.length > 0)。

希望对你有帮助!!

【讨论】:

    【解决方案4】:

    控制台在循环结束之前执行,这就是它变空白的原因。使用 async-await 以获得正确的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2016-03-12
      • 2016-05-22
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多