异步等待状态已解决,但ajax未完成

时间:2019-02-13 17:36:53

标签: javascript ajax promise async-await

我正在尝试等待getJson调用并处理返回的数据。我已经看到了很多答案,并尝试使用$.ajax的{​​{1}}(由于查询是跨域的,所以不起作用),回调和基本{ {1}}个电话。现在,我正在尝试异步等待。我的代码如下:

async: false

有时候,如果ajax调用返回的速度足够快,它有时会起作用,但是在大多数情况下,控制台日志显示:

promise object

这显示将.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。它在大多数时间都有效。它似乎只是在您第一次运行时失败(同样,成功时输出将进入浏览器日志)。我只需要弄清楚为什么它会在我的应用程序中发生。奇怪的是,如果我重新加载页面,它适用于给定的数据集。

1 个答案:

答案 0 :(得分:1)

您正在getTrailheads内部正确使用async / await,但是调用它的代码也需要使用async / await或其他方式处理promise。假设代码可以是async,您可能只需要在调用之前添加await

var ths = await getTrailheads(turl);

async / await或多或少是在Promise之上的语法糖,这就是为什么不等待getTrailheads的结果返回Promise的原因。如果效果更好,您也可以使用getTrailheads(turl).then(ths => {...})