Stuck with asynchrony: Promise : SyntaxError:

8 浏览
0 Comments

Stuck with asynchrony: Promise : SyntaxError:

你能帮我处理异步请求吗?我的任务是编写一个函数,通过IP获取城市名称并返回它。但是我在处理这个异步过程中遇到了困难。

我的代码:

async function get_city(){
    // 通过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 {: SyntaxError: JSON输入意外结束
    at JSON.parse ()
    at get_city (http://vi…}
?utm_replace=ViarVizualizatorArhiva_TR:645 
?utm_replace=ViarVizualizatorArhiva_TR:591 Uncaught (in promise) SyntaxError: JSON输入意外结束
    at JSON.parse ()
    at get_city (?utm_replace=ViarVizualizatorArhiva_TR:591)
    at replacer (?utm_replace=ViarVizualizatorArhiva_TR:639)
    at ?utm_replace=ViarVizualizatorArhiva_TR:649

如何解决这个错误?

0
0 Comments

async function() {
  try {
    await get_city();
  } catch (error) {
    console.log(error);
  }
}

问题的出现原因是因为在使用await关键字调用get_city()方法时,没有使用try/catch块来捕获可能发生的Promise拒绝(rejected)的错误。解决方法是在async函数中使用try/catch块,并将await get_city()放在try块中,以便捕获错误并处理。

完整的文章如下:

使用异步操作时遇到的问题:Promise : SyntaxError

当你需要监听请求的load事件时,你可以这样做:

http.addEventListener("load", function () {
  console.log(JSON.parse(http.responseText));
});

为了将其构建成一个Promise,你可以在load事件中使用resolve

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

我猜你必须将这个事件包装在带有await作为前缀的try/catch块中。

async function() {
  try {
    await get_city();
  } catch (error) {
    console.log(error);
  }
}

以上就是出现问题的原因以及解决方法。

0