【发布时间】:2019-07-01 08:50:20
【问题描述】:
我在 Windows 上的 vagarnt 上运行 ubuntu 服务器。我在文件夹的文档根目录上有一个 JSON 文件。我想使用 async/await 来获取 JSON 数据。这是我在谷歌搜索和学习后得出的代码。
async function getJSON() {
try {
var result = await makeRequest("GET", "./form-data/test-items/test.json");
console.log(result);
} catch(error) {
console.log(error);
}
}
function makeRequest(method, url) {
return new Promise(function(resolve, reject) {
let xhr = new XMLHttpRequest();
xhr.overrideMimeType("application/json");
xhr.addEventListener("readystatechange", function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var respond = xhr.responseText;
resolve(respond);
} else {
reject(xhr.statusText);
}
}, false);
xhr.open(method, url, true);
xhr.send();
});
}
document.addEventListener("DOMContentLoaded", getJSON, false);
问题是只有异步函数中的catch块一直在运行。我确信我从 Ajax 请求中获得了响应文本,因为我已经在控制台上对其进行了测试。但我不知道 await 语句是如何失败的。
我该如何解决这个问题?我错过了哪一部分?
【问题讨论】:
-
我建议将其关闭为与How do I promisify native XHR? 重复(即使问题与问题本身完全不同)。由于该副本显示了如何通过详细解释正确地承诺
XMLHttpRequest,并且此处已经存在的答案解释了给定代码的问题。 -
@t.niese 我也同意你的看法。我虽然它与异步/等待有关,但这只是逻辑错误。
标签: javascript promise async-await