【问题标题】:I keep getting undefined after async call in another function在另一个函数中进行异步调用后,我一直未定义
【发布时间】:2021-09-05 21:29:24
【问题描述】:

我有 2 个函数,其中一个使用 async 和 await 来获取数据并将其放入数组中。 第二个是像检查器一样检查用户是否输入了与数据库中看到的相似的值

function repeatsChecker() {
  let api_data_values = []

  fetchData().then(data => {
    for (let i = 0; i < data.length; i++) {
      api_data_values.push(data[i].name)
    }
  })

  return api_data_values

}

// testing for similarities

async function test() {
  let name = "Joe"
  let test = await repeatsChecker();
  console.log(test[0])
}

test()

当我编译一个简单的 if 语句时,一切都返回 true,当我执行 console.log(test[0]) 它返回未定义?

【问题讨论】:

    标签: javascript asynchronous async-await


    【解决方案1】:

    repeatChecker 没有返回承诺,因此您是 awaiting 的事实没有任何意义。 console.log(test[0])api_data_values.push(data[i].name) 之前执行。

    试试这个:

    function repeatsChecker() {
      return fetchData().then(data => {
        return data.map(value => value.name);
      });
    }
    

    或者使用异步/等待:

    async function repeatsChecker() {
      const data = await fetchData();
      return data.map(value => value.name);
    }
    

    【讨论】:

    • 感谢@NicholasTower,我是 js 新手,你能帮我理解哪一点是承诺。因为我相信返回 api_data_values 做到了?还是必须发生在 .then
    • fetchData() 创建一个承诺。然后,您的代码在 promise 上调用 .then,并在 promise 上调用 .then 创建另一个 promise。但是,由于您没有将第二个 Promise 保存到变量或将其返回,因此该 Promise 丢失了。 return api_data_values 返回一个数组,但该数组在您返回时为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多