Stuck with asynchrony: Promise : SyntaxError:
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
如何解决这个错误?
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
当你需要监听请求的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); } }
以上就是出现问题的原因以及解决方法。