each存在的同步异步问题

308 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

今天来说说异步问题。

今天上班更改需求的时候用到了一个循环处理的each函数,需求需要通过JQ对所选择的类进行操作 ,判断每个类中是否已经设置了某个属性,如果每个类都包含了这个属性,则执行下面的后续操作,但是写代码的过程中发现了判断还没成立就已经执行成功函数的问题,因此想确定each是否为异步函数,

通过查询得知JQ的each其实是同步函数不是异步函数

同步和异步最早用到的地方是最初接触ajax的时候,通过async可以控制ajax请求为同步或者异步

“同步的优点是:同步是按照顺序一个一个来,不会乱掉,更不会出现上面代码没有执行完就执行下面的代码, 缺点:是解析的速度没有异步的快;异步可以跳过没执行完的代码,同时执行下部分的代码,节约请求时间”

写以下这个需求的时候发现并不会按照我原本设想的规则来进行判断,当所有toisClass类中判断条件的时候,并不会停止执行,而是接着执行下面的代码

$(".to__isClass").each(function(){//通过jq判断每个to__isClass类中是否每个类都存在一个projectId的属性
    if($this.attr('projectId')=='undefined){
        return flase
     }
}
console.log('change')

这样的写法让我产生了each函数到底是不是异步函数的问题,但是从资料中显示 JQuery一个JavaScript库。除了ajax,setTimeout和setInterval之外,没有什么东西可以在JavaScript中异步执行。所以每一个都是同步执行的。那么可能是我的each块代码中肯定存在一些js错误。导致了执行跳过了判断阶段,直接选择执行了后面的代码 所以无论是foreach还是each,都不能直接在里面直接return,需要在加一层判断进行判断是否执行,执行的话才能通过return终止循环,或者可以通过设置flag的方法进行判断,这里笔者用的是通过判断是否设置id进行判断