小白问题] axios 循环请求,响应时间不同,导致数据的排序紊乱

2022-04-27 18:17:11 +08:00
 OkabeRintaro

最近在用 VUE 仿写一款小说阅读器,在根据 ID 发送 axios 请求获取小说内容数据的时候,渲染到页面的时候,顺序出现了问题. 用 forEach 遍历这个数组,然后去请求数据,但是每章小说的内容不一样,获取到的时间也不一样,导致章节紊乱......

arr: [ { id: "111x" },/* 对应的数据是小说的第一章, 至少 2 秒才响应返回数据*/ { id: "222xs" },/* 对应的数据是小说的第二章 至少 5 秒才响应返回数据*/ { id: "333sa" },/* 对应的数据是小说的第三章 至少 3 秒才响应返回数据*/ ... ] ,根据数组 arr 的每个对象的属性 ID 作为参数,循环 axios 请求来获取数据,存入数组, 要求: 最终该数组的数据排序应该是小说的第一章,第二章,第三章......即数据需要按照对象的索引排序

呜呜,来个大佬帮一下......

1217 次点击
所在节点    前端开发
5 条回复
noe132
2022-04-27 18:24:28 +08:00
学习一下 Promise 把小老弟
看看 Promise.all
1KN6sAqR0a57no6s
2022-04-27 18:30:41 +08:00
let id_arr = [
{
id: "001"
},
{
id: "002"
},
{
id: "003"
},
{
id: "004"
}
]

let content_arr = new Array(id_arr.length);


id_arr.forEach(async (id, index) => {
console.log(id, index);
let res = await axios.get("https://getcontent.com/"+id.id);
let content = res.data;
content_arr[index] = content;
})

setTimeout(() => {
console.log(content_arr);
}, 10000);
OkabeRintaro
2022-04-27 19:40:43 +08:00
@YuxiangLuo @noe132 谢谢! 用了 axios.all()和 axios.spread()已经拍好了 先循环弄出所有的 promise 对象放入新数组,再 all 这个新数组 ,spread 出来所有的正确顺序
OkabeRintaro
2022-04-27 19:48:17 +08:00
<script>
import axios from "axios";
created() {
//第一次进小说,只要前 4 章
this.firstSecIdList = (this.bookList || "").slice(0, 4);
// 遍历前四个,四个全部分到一个新的 url 数组集合里
this.firstSecIdList.forEach((item, index) => {
// 请求章节内容的 URL 链接
item, index;
this.firstSecIdListURl.push(
axios.get(
`A----P----I?小说内容 ID=${item.secId}`
)
);
});
// 输出这 4 个 promise 对象
console.log(this.firstSecIdListURl);

axios.all(this.firstSecIdListURl).then(
axios.spread((...res) => {
// 由于不知道数组的长度,所以我们通过...扩展运算符将数组变成一个参数序列
[...res].forEach((item, index) => {
index;
console.log(item, index);//输出结果为按照索引发出的请求并且是正确的顺序的返回数据
//小说内容放进页面
this.bookContent = item.data.data.content;
this.$refs.content.innerHTML += this.bookContent;
});
})
);
});
</script>
elboble
2022-04-28 07:50:25 +08:00
axios 是异步的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849622

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX