function makeRequest(method, url) {
return new Promise(function (resolve, reject) {
let xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.onload = function () {
if (this.status >= 200 && this.status < 300) {
resolve(xhr.response);
} else {
reject({
status: this.status,
statusText: xhr.statusText
});
}
};
xhr.onerror = function () {
reject({
status: this.status,
statusText: xhr.statusText
});
};
xhr.send();
});
}
我知道如何使用通过async / await返回诺言的函数,但是如何将其转换为async / await,根本没有诺言。 (我知道异步/等待是隐含的承诺)。
答案 0 :(得分:2)
这是不可能的。 await
(及其必须包含的async
函数)在大多数情况下是Promise.prototype.then
的替代品-它不是{em>不是的{ {1}}。换句话说,new Promise
与await
一样,消耗一个承诺。如果没有可用的承诺,则不能使用.then
(或者至少不明智)。
如果您有一些基于回调的内容,例如await
,并且想与XMLHttpRequest.prototype.onload
一起使用,则必须 both 首先将其转换为Promise(因为您'目前正在做),并且也 await
的承诺,例如:
await
(async () => {
await makeRequest('GET', '/foo');
})();
仍使用makeRequest
显式创建Promise。