阻止js执行,直到异步请求完成

时间:2017-09-13 09:04:40

标签: javascript asynchronous fetch

我遇到了为反应应用预取资源的问题。我有一个函数应该获取json资源并将它们分配给循环中的对象属性。然后该函数应该返回具有已经解析的jsons的对象,但不是它返回具有未解析的promises属性的对象。

是否可以在promises完全填充之前停止执行js代码,以便函数返回正确的数据?

是的,类似于同步请求。

async function getJson (file, url) {

  const response = await fetch(`${url}/${file}.json`);
  const json = await response.json();

  return json;
}

async function getTranslations(files, url) {
    let r = {};

  files.map( (file, i) => {
    r[file] = await getJson(file, url);
  });

  return r;
}

1 个答案:

答案 0 :(得分:0)

我认为你不应该像这样使用'map' - 用forEach填充你更好的对象。虽然我无法保证这是问题所在。

async function getTranslations(files, url) {
    let r = {};

    files.forEach(file => r[file] = await getJson(file, url));

    return r;

}