在Javascript中等待异步GET请求
我想向API发出GET请求并从中检索数据。据我所知,我的在Javascript中等待异步GET请求,javascript,api,asynchronous,callback,Javascript,Api,Asynchronous,Callback,我想向API发出GET请求并从中检索数据。据我所知,我的$.getJSON是异步的,这意味着它不会等到完成后才继续使用我的代码。现在,我认为从研究中可以看出最好的方法是使用回调,但我仍然不知道如何最好地实现它(即使是最好的方法)。您可以使用下面的示例代码来演示吗 function getData(URL) { $.getJSON(URL, function(data) { //play with data, such as save to localStorage on
$.getJSON
是异步的,这意味着它不会等到完成后才继续使用我的代码。现在,我认为从研究中可以看出最好的方法是使用回调,但我仍然不知道如何最好地实现它(即使是最好的方法)。您可以使用下面的示例代码来演示吗
function getData(URL) {
$.getJSON(URL, function(data) {
//play with data, such as save to localStorage on web broswer
}
}
function container() {
var URL = "https://someurl....";
getData(URL);
// Now access the data from localStorage, which was saved during .getJSON function, will fail if getData is ran async due to delay
// Open URL here appending data from the GET request, have to obviously have it prior to proceeding
}
我知道这是一个相当广泛的讨论,我向你保证,我没有张贴这之前,研究,但我仍然有一个困难的时间。如果有人能用这个例子来演示,它可能真的能帮助我理解。谢谢大家! 您可以让
getData
使用回调函数:
function getData(URL, cb) {
$.getJSON(URL, function(data) {
//play with data, such as save to localStorage on web broswer
cb(data);
}
}
function container() {
var URL = "https://someurl....";
getData(URL, function(data) {
// Now access the data from localStorage
});
}
或者返回一个承诺,然后允许您使用async/await
function getData(URL) {
return new Promise(function(resolve, reject) {
$.getJSON(URL, function(data) {
//play with data, such as save to localStorage on web broswer
resolve(data);
}
});
}
async function container() {
var URL = "https://someurl....";
var data = await getData(URL);
// Now access the data from localStorage
}
既然$.getJSON
已经返回了一个承诺,这就更好了:
function getData(URL) {
return $.getJSON(URL).then(function(data) {
//play with data, such as save to localStorage on web broswer
return data;
});
}
// container function stays the same as above
或:
看来问题已经有了答案。实际上,在回调函数中执行所有“播放”操作;你读过什么,学过什么,你到底还不明白什么?正如您所说,这是一个相当广泛的讨论,因此,除非您非常具体,否则很难看到再次尝试解释如何成功。虽然链接的问题确实提供了有用的信息,但它不仅需要将所有.getJSON语句转换为.ajax符号和格式,但随后还需要将asnyc请求后应运行的所有后续代码移动到新函数中,然后将其作为回调传递到原始函数中……这需要大量重构,我希望会有更具可读性/说服力的内容。另外,对于ajax请求,它会使回调在成功后运行,但是如果我希望所有代码等待请求完成,该怎么办呢。不,它不是,您可以使用与
$.getJSON
或任何其他异步函数/方法相同的逻辑。这就是标准副本的要点。2.您必须提取一个函数用于回调,无论是直接回调还是承诺/可观察回调,或者您可以使用async
/await
语法,该语法也包含在副本中。return new Promise
是多余的getJSON
已返回一个可编辑对象。
async function getData(URL) {
var data = await $.getJSON(URL);
//play with data, such as save to localStorage on web broswer
return data;
}
// container function stays the same as above