我在获取请求时遇到问题,问题是由于某种原因它以随机顺序返回元素。其功能如下:
function create_post_div(element, isLogged, currentUser, isProfile) {
console.log(element.id);
fetch(`likes/${element.id}`)
.then((response) => response.json())
.then((like_element) => {
console.log(like_element.user_liked, element.id);
});
}
为了简单起见,我没有放置整个函数,但可以通过控制台日志检测到错误。第一个控制台日志应返回整数的 element.id,第二个控制台日志应返回 bool 值和相同的 element.id 的 like_element.user_liked。
create_post_div 函数必须针对从另一个函数接收到的每个元素(假设是一个列表 [1, 2, 3])运行。当我运行该函数时,第一个 console.log 以正确的顺序返回数字,但是 fetch 中的 console.log 随机返回它们。我注意到的另一件事是,而不是控制台是这样的:
1
true, 1
2
false, 2
3
true, 3
它的日志如下:
1
2
3
false, 2
true, 3
true, 1
它将首先记录所有 id,然后记录带有 id 的点赞。同样,第一个日志中的 id 始终按顺序排列,而第二个日志中的 id 始终无序。
最佳答案
当您使用 fetch 时,您创建了一个Promise,这是一个需要未定义的时间才能完成的操作。 Javascript 不会等待 Promise 完成,它会继续运行,完成您编写的所有其他操作。
一旦获取操作完成,您放入 .then
中的代码就会被执行,这就是为什么它被称为异步代码,因为它是在未定义的时间后执行的时间。
与其像建议的那样与此作斗争并尝试强制代码与 async/await 同步运行,我建议重新连接您的大脑以理解并接受这种模式。除非设计上绝对有必要,但这应该是一种非常罕见的情况。
关于javascript - Json 获取以随机顺序返回的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65694351/