您能帮助我处理异步请求吗?我的任务是组织一个功能,以通过IP获取城市名称并返回它。但是我坚持这种异步性。
我的代码:
async function get_city(){
// Get city name by IP.
const http = new XMLHttpRequest();
const url='https://api.sypexgeo.net/json/';
http.open("GET", url);
http.send();
var response_json = await JSON.parse(http.responseText);
return response_json["city"]["name_ru"];
}
我收到此错误:
Promise {<rejected>: SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at get_city (http://vi…}
?utm_replace=ViarVizualizatorArhiva_TR:645
?utm_replace=ViarVizualizatorArhiva_TR:591 Uncaught (in promise) SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at get_city (?utm_replace=ViarVizualizatorArhiva_TR:591)
at replacer (?utm_replace=ViarVizualizatorArhiva_TR:639)
at ?utm_replace=ViarVizualizatorArhiva_TR:649
如何处理此错误?
答案 0 :(得分:0)
您需要监听请求中的load
事件。
http.addEventListener("load", function () {
console.log(JSON.parse(http.responseText));
});
要从中构建Promise
,可以在resolve
事件中load
。
function get_city() {
return new Promise(function(resolve) {
const http = new XMLHttpRequest();
http.addEventListener("load", function () {
resolve(JSON.parse(http.responseText));
});
http.open("GET", 'https://api.sypexgeo.net/json/');
http.send();
});
}
要使用此功能,可以用await
进行调用。
async function() { await get_city(); }