Javascript:如何在继续之前等待获取结果

时间:2021-06-05 00:52:22

标签: javascript json promise fetch es6-promise

这个问题以前可能在这里问过,很抱歉,但我无法在任何地方找到解决我的问题的方法。我对 JavaScript 比较陌生,像 “promises” 这样的东西对我来说很陌生。我正在尝试编写一个从 .JSON 文件加载数组的代码,加载后,代码将继续。

async function fetchTags() {
    var response = await fetch('../json/tags.json');
    var json = await response.json();
    console.log(json); // returns: Array()
    return json;
}

function mainFunction() {
    let tags = fetchTags();
    console.log(tags); // returns: Promise { <state>: "pending" }
}

这是我当前代码的样子,使用的是我在互联网上找到的不起作用的“解决方案”。虽然异步函数内部的 console.log(json) 正确返回数组,但主函数的 console.log(tags) 以“待处理”状态显示此承诺 - 并且显示比加载数组更快,如果我理解正确。

然而,mainFunction() 的以下代码强烈依赖于该数组,并且在加载数组之前不应继续执行。我哪里出错了?

非常感谢您的回复。

1 个答案:

答案 0 :(得分:2)

此时,fetchTags是一个异步函数,调用时需要这样处理。您在此处有两个实施选项:

  1. async/await 用于 mainFunction 函数:
async function mainFunction() {
    let tags = await fetchTags()
    console.log(tags)
}
  1. 适当处理函数返回的promise:
function mainFunction() {
    fetchTags()
      .then(console.log)
      .catch(console.error)
}