javascript - 如何等到 jQuery 函数完成后再继续?

标签 javascript jquery node.js

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/

相关文章:

javascript - 在 Rails 中找不到 Bootstrap

javascript - 在 bootstrap 工具提示标题 data-html 中不起作用的特殊字符 true

node.js - Selenium Node + Sauce 实验室测试 : Cannot Finish a Task

node.js - 在 Node js 中每小时每 10、20、30、40、50、60 分钟运行一次 cron 作业

javascript - JQTouch表单重定向

javascript - 在 AngularJS 1.5.0 中获取 $http.get() 中的空返回结果

javascript - jquery 的语义选项卡和 Handlebars 问题,选项卡内容未变为事件状态

jquery - if 语句中的比较?

javascript - 如果 AngularJs 中未选择 3 个下拉菜单,则隐藏标签

node.js - 此 npm 安装不适用于 Windows