在这种情况下,在哪里放置 async/await?

我已经浏览了文档,阅读了其他问题和答案,但我仍然无法理解什么函数可以使异步,以及在哪里放置等待,以获得我想要的行为。


基本上,我希望console.log(this.data)构造函数中的 注销我获取的数据,但现在它注销了一个挂起的Promise.


我已经尝试了几乎所有我能想到的方法,但最终我总是退出 aPromise或undefined.


我在哪里可以在这些方法中添加 async/await 以使其注销构造函数中获取的数据?


如果我以完全错误的方法进行此操作,请告诉我。



class Apa {


  constructor () {


    this.ajaxURL = 'https://example.com/api/';

    this.mockParams = {

      title: 'foo',

      body: 'bar',

      userId: 1

    };


    this.data = this.getData(this.mockParams).then(xhr => this.data = JSON.parse(xhr.response)).catch(xhr => this.data = {});

    console.log(this.data);


  }


  getData(params) {


    return new Promise((resolve, reject) => {


      let request = this.postAjax(this.ajaxURL, params);

      request.then((xhr) => {

        resolve(xhr);

      }).catch((xhr) => {

        this.errorMessage = 'Ajax request failed: getData()';

        reject(xhr);

      });


    });


  }


  postAjax(url, data) {


     return new Promise((resolve, reject) => {

            var params = typeof data == 'string' ? data : Object.keys(data).map(

                function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }

            ).join('&');


            var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

            xhr.open('POST', url);

            xhr.onreadystatechange = function() {

                if (xhr.readyState>3 && xhr.status==200) { resolve(xhr); }

            };

            xhr.onerror = () => reject(xhr);

            xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

            xhr.send(params);

        });


  }


}


注意: 我知道这个类不能按原样工作,我不得不用模拟的东西替换真正的 API 端点,但我可以确保你在调用真正的 API 时没有问题。承诺(解决后)确实包含具有正确响应的真实 XMLHttpRequest。


守着星空守着你
浏览 217回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript