理解异步

2022-11-14 16:47:35 浏览数 (2)


theme: channing-cyan

这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战

异步就是同步的对立统一,我们要说异步的话,得先了解同步。

什么是同步

我们都要知道JavaScript是单线程时间循环模型,同步就相当于一条流水线,比如加工产品,我们得先采购原材料,再运输到加工厂,然后再加工,最后变成产品出售或者使用。在代码中,同步就是按照顺序执行我们所输入的指令,每条指令都会按照我们编写的先后顺序执行。

代码语言:javascript复制
    const i = 1;
    i  ;

这个例子就是先定义i等于1,然后i 1等于i,也就是i等于2,我们可以很直观的看到程序执行的状态。

什么是异步

相对于上面的同步,我们可以明显感觉到同步在一些地方是不合适的,比如我们加载页面,如果我们需要获取后台数据来渲染到页面上,但是下面还有好多要执行的操作,也许网络延迟,我们这个没获取到,后面的代码是执行不了的,那么页面就会白屏,非常影响用户体验。我们来写一个简单的异步操作小栗子(设置定时器)。

代码语言:javascript复制
     const i = 1;
     setTimeout(() => {
         console.log('jackson')
     }, 2000);
     console.log(i)

大家可以复制代码或者控制台测试一下,这里会先输出i的值,也就是1,然后才输出我的英文名Jackson。

异步操作不容易推断,虽然这个小栗子我们肉眼可见它的执行。它相当于设置了一个子线程,因为子线程独立于主线程,所以即使出现阻塞也不会影响主线程的运行。但是子线程有一个局限:一旦发射了以后就会与主线程失去同步,我们没有办法确定这个子线程多会儿执行结束,一般来说我们会设置一个异步回调来实现异步操作返回的结果。

回调函数就是上面我们用settimeout设定让它2秒后执行输出我的名字。当然还有其他异步定义和组织操作,我们这篇文章只了解一下异步是什么,后面再来为大家讲解其他异步定义和操作。

0 人点赞