async function tempfunc2(result) {
return new Promise((resolve, reject) => {
for(var i = 0; i < result.length; i++)
{
var url = "SomeURLGeneratedByPreviousFunction";
$.getJSON(url, function(data) {
if (data.mappings["0"]) {
gameHashes.push(data.mappings["0"].game);
}
});
}
return resolve(gameHashes);
});
}
我有这个代码块正在获取和填充数据。它处理相当多的数据,因此需要一些时间。
我想要的是这个函数在完成之前完成,因为接下来的代码行依赖于这个函数的结果。
但是,按照当前构建的方式,它将在函数完成之前返回哈希值。我如何等待这个 jQuery 函数?
我尝试在 $.getJSON
之后放置 .then()
,但效果并没有太大变化。
我还尝试将这个特定的部分放入不同的函数中以尝试并等待它,但这也不起作用
await tempfunc().then(tempfunc2);
这就是所谓的tempfunc2
。
最佳答案
一旦收到 $.getJSON
的响应,您就需要解析该 Promise。
类似这样的事情:
async function tempfunc2(result) {
return new Promise((resolve, reject) => {
$.getJSON(url, function(data) {
if (data.mappings["0"]) {
gameHashes.push(data.mappings["0"].game);
}
resolve(gameHashes)
});
})
}
确保将 gameHashes
定义为数组。
从对问题的编辑来看,您似乎正在进行多个 &.getJSON
调用。在这种情况下,您需要执行以下操作:
function tempfunc2(result) {
return new Promise(async resolve => {
const promises = result.map(value => {
return new Promise(resolve => {
$.getJSON(url, function(data) {
resolve(data)
});
});
})
let results = await Promise.all(promises)
results = results.filter(v => v.mapping && v.mapping["0"]).map(v => v.mapping["0"].game)
resolve(results);
});
}
关于javascript - 如何等到 jQuery 函数完成后再继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54393432/