我正在尝试等待getJson
调用并处理返回的数据。我已经看到了很多答案,并尝试使用$.ajax
的{{1}}(由于查询是跨域的,所以不起作用),回调和基本{ {1}}个电话。现在,我正在尝试异步等待。我的代码如下:
async: false
有时候,如果ajax调用返回的速度足够快,它有时会起作用,但是在大多数情况下,控制台日志显示:
这显示将.done
设置为$.ajax
的承诺。许诺对象在那里,但对象状态显示为var ths = getTrailheads(turl);
console.log("trailheads promise");
console.log(ths);
ths.then(function(data) {
addTrailheadsToMap(data);
});
async function getTrailheads(turl) {
var result = await $.ajax({
url: turl,
datatype: 'json'
});
return result;
}
。
这是一个常见的情况,但是常见的答案似乎对我不起作用,因此将不胜感激。
更新:
status
现在,我取回了对象而不是诺言,但是该对象仍在“处理中”,然后在尝试使用它时失败。 object dump
更新2: 我确定你们俩都是正确的,而您描述的方式就是您如何做到的。我在https://codepen.io/mckee80/pen/KJBbvz这里有一个Codepen。它在大多数时间都有效。它似乎只是在您第一次运行时失败(同样,成功时输出将进入浏览器日志)。我只需要弄清楚为什么它会在我的应用程序中发生。奇怪的是,如果我重新加载页面,它适用于给定的数据集。
答案 0 :(得分:1)
您正在getTrailheads
内部正确使用async / await,但是调用它的代码也需要使用async / await或其他方式处理promise。假设代码可以是async
,您可能只需要在调用之前添加await
:
var ths = await getTrailheads(turl);
async / await或多或少是在Promise之上的语法糖,这就是为什么不等待getTrailheads
的结果返回Promise的原因。如果效果更好,您也可以使用getTrailheads(turl).then(ths => {...})
。