如何解决使用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);
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。