我已经浏览了文档,阅读了其他问题和答案,但我仍然无法理解什么函数可以使异步,以及在哪里放置等待,以获得我想要的行为。
基本上,我希望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。
相关分类