这里是讨论编程方式。
javascript 实现异步,本质上还是依靠
这几种方式去异步。
回调是一种最基础的方式。
1 | setTimtOut(fn, time) |
EventListener 也是靠回调解决
1 | button.addEventListener('click', handleClick); |
可以理解为回调的变种,或者工厂, 闭包
1 | function thunk(url) { |
这种方式的好处在于,分割参数
1 | let requestA = thunk(url); |
你可以直接调用 requestA, 相当于封装了一层。
就是开头提到的 EventListener。
这个涉及到 javascript 一个基础概念, JavaScript 是一种事件驱动的语言。
它通过事件机制来响应用户的操作和系统的变化。
事件可以是用户操作,如鼠标点击、键盘输入、窗口滚动等,也可以是系统变化,如网页加载完成、定时器到期等。
DOM 事件和自定义事件,它们都是异步执行的。
1 | const button = document.getElementById('myButton'); |
但是如果是有我们自己去触发,就是同步执行,比如通过 dispatchEvent 触发。
1 | // 定义观察者对象 |
例子中这个异步其实没有意义,主要是应该在 notify 通知之前来异步,比如接收到消息之类的
但是模式是这么一个模式
异步编程前端目前来说最佳解决方案。
也是 Prmoise,只是语法糖。
因为可以暂停的机制,可以很好的批量触发异步任务
1 | function* reuslts(urls) { |
这里需要知道一个概念协程
协程(Coroutine)是一种计算机程序组件,它可以在执行过程中暂停、恢复和传递控制权,从而支持多任务协作并发编程。简单来说,协程是一种更轻量级的线程,它可以像线程一样并发执行,但相比线程占用更少的资源,并且可以更方便地实现协作式多任务处理。
与线程不同,协程并不是由操作系统内核管理的,而是由应用程序自行管理。协程通常由一个生成器函数(Generator Function)和一个调度器(Scheduler)组成,生成器函数用于定义协程的执行流程,调度器用于控制协程的调度和协作。
协程通常具有以下特点:
- 协程可以在执行过程中暂停和恢复执行,这种操作通常称为挂起和恢复。
- 协程可以保存和恢复自己的状态,包括变量、指令指针和调用栈等。
- 协程通常使用协作式调度,即协程之间协作执行,不需要像线程那样通过操作系统内核进行调度。
- 协程通常可以实现轻量级的多任务处理,支持更高效的并发编程。