javascript - 我如何等待 axios 被退回?
问题描述
当我在 get() 中的 finally 块中 console.log 数组时,并非所有假设由 helper() 检索的值都不存在。我想这是因为 axios 方法是异步的。我认为如果我在 helper() 上使用 await 关键字,它将等待该方法,以便可以打印我想要的所有值,但这不会发生。有没有办法可以等待辅助方法?
(function get() {
let videoThumbnails = new Array();
axios.get(urlConstants.latestAnimeUrl)
.then((res) => {
if (res.status === 200) {
const html = res.data;
const $ = cheerio.load(html);
const thumbnails = $(".post div a img");
for (let i = 0; i < thumbnails.length; i++) {
let videoThumbnail = new Object;
videoThumbnail.thumbnailLink = thumbnails[i].attribs['data-cfsrc']; //image thumbnail link, thumbnail dimensions if needed
videoThumbnails.push(videoThumbnail);
}
const links = $("a[itemprop=url]")
links.each(async function (i, elem) {
if (i < thumbnails.length) {
videoThumbnails[i].thumbnailTitle = $(this).attr("title");
await helper($(this).attr("href").toString(),videoThumbnails,i);// link to video webpage, but need actual video link
}
});
}
})
.finally(() => {
console.log(videoThumbnails);
});
return videoThumbnails;
})();
function helper(chiaUrl,videoThumbnails,index) {
axios.get(chiaUrl)
.then((response) => {
if (response.status == 200) {
const $ = cheerio.load(response.data);
const videoLink = $("div[id=load_anime] div iframe");
videoThumbnails[index].thumbnailLink = videoLink.attr("src");
}
})
.finally(()=> {
})
}
解决方案
axios.get
返回一个承诺。承诺可以被链接并等待。您的helper
函数返回undefined
. 你应该返回的结果axios.get
function helper(chiaUrl,videoThumbnails,index) {
return axios.get(chiaUrl)
.then((response) => {
if (response.status == 200) {
const $ = cheerio.load(response.data);
const videoLink = $("div[id=load_anime] div iframe");
videoThumbnails[index].thumbnailLink = videoLink.attr("src");
}
})
.finally(()=> {
})
}
还值得注意的是,如果您在 中返回某些内容.then
,它将是 await 的结果(因此您不必传入videoThumbnails
并对其进行变异即可获得结果)。
推荐阅读
- python - python 3.7单行理解
- javascript - React - useState 仅影响最后一个属性值
- sql - 检查 postgres 表中列的唯一性
- c++ - 如何在内存中的数据缓冲区上使用常规 std::basic_istream::read、std::basic_ostream::write?
- linux - 如何使用 bash 同时运行多个可执行代码?
- java - 创建基于自定义生成器/迭代器方法的流
- virtual - Vmware 工作站 15 上的 RDP
- amazon-web-services - AWS Cloudformation:“Lambda 函数的权限无效”出了什么问题?
- python - Numpy 按中位数分组(没有 Pandas)
- excel - 如何计算同一客户购买的重复产品数量