javascript - Json 获取以随机顺序返回的元素

标签 javascript json fetch

我在获取请求时遇到问题,问题是由于某种原因它以随机顺序返回元素。其功能如下:

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/

相关文章:

javascript - 不安全的 JavaScript 尝试访问框架...协议(protocol)必须匹配

javascript - R Shiny 中的绘图,包括 Javascript (d3.js)

javascript - 如何在 Global.asax 中获取 Angular View 的完整 url

Java JSON反序列化继承类

javascript - Laravel 5 vue.js : Property or method "comment" is not defined on the instance but referenced during render

javascript - 动态更改 javascript 函数?

json - 需要在 LogStash 中将字符串转换为 JSON

java - 将泛型类型的Json转换为特定的Json格式

ios - 保存和删除 NSManagedObject 和 NSManagedObjectContext

mysql - 查询数据库并显示