【问题标题】:ionic 3 promise not working离子3承诺不起作用
【发布时间】:2018-06-20 08:58:01
【问题描述】:

我尝试在我的新应用程序中使用 ionic。但是当我使用'promise'包时我遇到了一些问题

login.ts

var isAuthenticated = this.auth.login(form.value);
    console.log(isAuthenticated)

auth.ts

var AuthApiPromise = new Promise((resolve, reject) => {
      this.http.post(this.baseUrl, data, options)
      .toPromise()
      .then((response) =>
      {
        console.log('API Response : ', response.json());
        resolve(response.json());
      })
      .catch((error) =>
      {
        console.error('API Error : ', error.status);
        console.error('API Error : ', JSON.stringify(error));
        reject(error.json());
      });
    });

    return AuthApiPromise;

输出

如果我理解这个包是正确的,第二个亮点需要首先。但是为什么,请帮忙。

【问题讨论】:

    标签: typescript ionic-framework promise


    【解决方案1】:

    某些操作(如 AJAX 请求)是异步的,这意味着它们不会立即发生;他们最终解决了。 Promise 是用于简化复杂异步代码的结构。您可以阅读有关promises on MDN 的信息,我强烈建议您这样做。 asyncawait 是 ES6 语法,可以使基于 Promise 的代码更易于阅读(如果您了解语法和 Promise)。

    在您的特定代码中:

    var isAuthenticated = this.auth.login(form.value);
    console.log(isAuthenticated); // this code is executing immediately
    

    第一行是启动一个异步操作,最终会完成。 isAuthenticated 确实包含您的身份验证响应,而是一个承诺,它是解析值的句柄。第二行在您的身份验证操作完成之前立即执行,因为 JavaScript 是非阻塞的。

    this.auth.login(form.value).then((isAuthenticated) => {
      console.log(isAuthenticated); // this will print after auth completes
    });
    

    请注意,如果您需要执行另一个函数,则需要将其链接到登录承诺:

    this.auth.login(form.value).then((isAuthenticated) => {
      console.log(isAuthenticated); // this will print after auth completes
    }).then(() => doSomethingElse());
    

    否则它会像你的控制台语句一样执行不正确。

    您的身份验证方法不需要将 HTTP 请求包装在 Promise 构造函数中;它已经通过toPromise 方法返回了一个promise。

    // return AuthApiPromise
    return this.http.post(this.baseUrl, data, options)
      .toPromise()
      .then((response) => {
        console.log('API Response : ', response.json());
        return response.json();
      })
      .catch((error) => {
        console.error('API Error : ', error.status);
        console.error('API Error : ', JSON.stringify(error));
        return false; // authentication failed
      });
    

    【讨论】:

      【解决方案2】:

      将所有“response.json()”更改为“JSON.parse(response)”。 这是 Angular 5 httpClient 的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 2016-06-07
        • 2020-04-15
        • 2017-09-07
        • 2018-03-11
        • 1970-01-01
        • 2016-06-16
        相关资源
        最近更新 更多