理解异步
异步就是同步的对立统一,我们要说异步的话,得先了解同步。
什么是同步
我们都要知道 JavaScript 是单线程时间循环模型,同步就相当于一条流水线,比如加工产品,我们得先采购原材料,再运输到加工厂,然后再加工,最后变成产品出售或者使用。在代码中,同步就是按照顺序执行我们所输入的指令,每条指令都会按照我们编写的先后顺序执行。
这个例子就是先定义 i 等于 1,然后 i + 1 等于 i,也就是 i 等于 2,我们可以很直观的看到程序执行的状态。
什么是异步
相对于上面的同步,我们可以明显感觉到同步在一些地方是不合适的,比如我们加载页面,如果我们需要获取后台数据来渲染到页面上,但是下面还有好多要执行的操作,也许网络延迟,我们这个没获取到,后面的代码是执行不了的,那么页面就会白屏,非常影响用户体验。我们来写一个简单的异步操作小栗子(设置定时器)。
大家可以复制代码或者控制台测试一下,这里会先输出 i 的值,也就是 1,然后才输出我的英文名 Jackson。
异步操作不容易推断,虽然这个小栗子我们肉眼可见它的执行。它相当于设置了一个子线程,因为子线程独立于主线程,所以即使出现阻塞也不会影响主线程的运行。但是子线程有一个局限:一旦发射了以后就会与主线程失去同步,我们没有办法确定这个子线程多会儿执行结束,一般来说我们会设置一个异步回调来实现异步操作返回的结果。
回调函数就是上面我们用 settimeout 设定让它 2 秒后执行输出我的名字。当然还有其他异步定义和组织操作,我们这篇文章只了解一下异步是什么,后面再来为大家讲解其他异步定义和操作。
版权声明: 本文为 InfoQ 作者【大熊G】的原创文章。
原文链接:【http://xie.infoq.cn/article/41b83acafff1bde51e2cbdd41】。文章转载请联系作者。
评论