关于同步和异步

备注:这个问题和cocos creator是有关系的!请往下看。。。
大佬们,我被同步和异步弄迷糊了,我这里用的是Typescript,我理解的是:
(1) 普通的语句包括函数和for循环等,都是同步执行的;
(2) 回调语句和资源加载类型的语句等,是异步执行的;
上面这两条麻烦大佬给看下有没有错,如果没错的话,下面这个问题我实在没法解释:
程序里对1个节点取他的长和宽,另外的一些节点,按照所取节点的长宽,以及位置来计算它们的大小和位置,我发现,如果完全一直算是会出错的,算出来有的不对,但是,如果写一个sleep函数在中间某些位置断一下,就对了,其余节点和原始节点的大小和位置计算不在同一个函数内。
我怀疑是不是这样的,取节点的长宽和位置需要时间,如果我突然大量修改,可能来不及变化有的就被忽略掉了,可是对错和修改顺序又没有关系,有几个节点,如果中间不打断,固定是错的,这几点节点相对内容复杂一些。。。。。。

所以我猜的对不对。。。。。。老板们帮忙看看。。。。。

你猜的对,修改是需要时间的。很多东西在下一帧才会刷新

请问除了sleep以外还有没有好一点的解决办法,用sleep感觉很迷。。。。。。

你说的是lable吗

有一些节点上面有图片

把回调理解成异步是不对的~

function doCallback(func) {
    func && func();
}
doCallback(() => {
    console.log('a');
});
console.log('b');

普通语句也不一定是同步的,比如promise或延迟

function func(){
    setTimeout(()=>{});
}
let a = func();

这些是异步的调用:

  • Promise
  • setTimeout 等定时任务
  • 事件回调
  • async 函数,或者说返回 Promise 对象的函数

当你将一个函数传给一个你不知道内部原理的函数时,你的函数也可能会被异步调用,就像注册事件的回调函数。

谢谢各位~~~

这些应该也不能算真正的异步 只是不会在阻塞任务 属于微任务。好像是这样的,有大佬再深入讲下吗?

异步分为宏任务(定时器等)和微任务(promise等),另外js本质还是单线程,所以都不堵塞任务了,还不算异步还想咋样。

是否阻塞任务不就是用来区分同步异步的么 :joy:
难道还有不阻塞任务的同步和阻塞任务的异步?(await 是语法糖不算数的)。还是说你认为这些依然是单线程不算数?

js实现真多线程可以用iframe或者worker API。对于异步函数与多线程的讨论可以看一些权威的文档:Introducing asynchronous JavaScript - Learn web development | MDN