卡在异步中:承诺<拒绝>:语法错误:

时间:2019-01-24 22:51:56

标签: javascript

您能帮助我处理异步请求吗?我的任务是组织一个功能,以通过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

如何处理此错误?

1 个答案:

答案 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(); }