异步编程
同步:任务之间存在一定的约束关系,在执行过程中,存在一定的
前后顺序
异步:可以解释为两(多)者之间在随时间的执行过程中,两者之间没有约束关系,相互独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。
各任务以其相对独立的不可预知的速度向前推进。
异步一般需要通过多进程、多线程来实现。
应用场景:延时任务、耗时任务。
需求:需要监听延时-时间到达、耗时任务完成,在此时做一些操作。
技术方案
技术方案:ES6 诞生以前,异步编程的方法,大概有下面四种。
回调函数:以函数作为参数。这个操作一般称为
回调callback
。Callback是"call back"两个单字的合体,应该有听过" Call me back"的英文。电信公司中的说法大概是有客户打来电话给你,可是你正在电话中,客户会留话说请你等会有空时再"回电"给它。在程式开发上,callback的使用情境其实也类似—有空了/时间到了/任务执行完了,回过头来调用的。
事件监听
发布/订阅
ES6 Promise 对象
ES6 Generator 函数将 JavaScript 异步编程带入了一个全新的阶段。
ES8 async+await
所有的技术 — 目标:使 异步任务完成后的 回调 更优雅。可读性更高。以同步的方式去写异步的代码
1. 回调函数
以函数作为参数,将此函数称为回调函数。而接收函数作为参数的函数也称为高阶函数。
缺点:可能造成回调地狱(Callback Hell)
(多个任务之间相互依赖,回调函数一层层向下嵌套)