使用axios返回意外的Promise <state>待处理状态

问题描述

我希望有人可以在这里指出我的错误方式。

我目前有两个职能。一个是getData,它是一个异步函数,仅使API调用即可请求数据。第二个函数是getRandomCategories,它封装了getData函数调用,并将该异步操作的值保存在名为res的变量中。 getRandomCategories中的其余代码将响应数据处理为一个数字数组,其中每个数字代表一个类别。

当我在getRandomCategories函数中使用调试器语句(在try块中的return语句之前)时,我从名为apiCallCategoryArray的变量中获得了期望的数据类型-它是一个数字数组每个代表一个类别。生活是美好的。

这是磨擦。当我调用getRandomCategories时,期望dataArray变量(位于代码段的底部)保存一个数字数组-我得到一个Promise,其状态为未决??

我不明白为什么apiCallCategoryArray变量的值使用调试器显示为我的期望值(因此我在函数中将其返回),但是我无法访问该值当我调用该函数时。为什么我以未决状态重新获得承诺?我想念什么?

下面是我的代码:

async function getData(endpoint,query,value) {
  return await axios.get(
    `http://jservice.io/api/${endpoint}?&${query}=${value}`
  )
}

// createa a function that will return 6 random categories
async function getRandomCategories() {
  try {
    const res = await getData('categories','count',50)
    const data = res.data;
    const categories = filterCategoryData(data); // I'm filtering for category id with clues_count === 5
    const categoryIdArr = mapCategoryIds(categories); // an array of just category Ids
    const shuffledCategoryIds = shuffle(categoryIdArr);
    const apiCallCategoryArray = takeFirstXItems(shuffledCategoryIds,6);
    debugger//  the value is what I'm expecting an array of numbers with length = 6
    return apiCallCategoryArray
  } catch (err) {
    console.log(err);
  }
}



//Solution one: Does not work. I'm getting a promise back instead of an array of numbers
const dataArray = getRandomCategories()
console.log(dataArray) // Promise { <state>: "pending" }
// expected return value [12231,12344,343245,124041,348855] array of numbers

// Solution two: Does not work either. I'm still getttng a promise back instead of an array of numbers
const dataArray2 = getRandomCategories().then((array) => {
  return array
})
console.log(dataArray2) // Promise { <state>: "pending" }
// expected return value [12231,348855] array of numbers

我的目标是让我的dataArray变量保存一个通过调用getRandomCategories()返回的数字数组(不是有待处理的Promise)。因此,我可以将此值用于代码中的其他功能。

提前感谢您的时间和回复。

解决方法

您需要使用use async,等待取回Promise数据。像这样

async function test(){
  let dataArray2 = await getRandomCategories();
  console.log(dataArray2);
};

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...