发表于: 2021-09-07 23:53:24
0 1622
异步编程有哪几种方法来实现?
JavaScript作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。 所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个。 这样一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务。 好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。
为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous)。
“同步模式"指后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的。
"异步模式"则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务, 而是执行回调函数,后一个任务则是不等前一个任务结束就执行, 所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
异步编程方法
异步编程的主要方式是使用回调函数,但是回调函数嵌套形成Callback Hell问题。 Callback Hell 最大的问题是不好写、不好看,以及衍生出来的不好管理,这样的代码不易阅读、管理、重构困难、没有灵活性。
无论是 Promise 还是 generator,亦或者是 async/await,他们所做的任务都是要千方百计地把Callback Hell拉成平整的线性结构,加入语法糖。
1 回调函数 2 事件监听 3 Promise 4 Generation 5 async/await
1 回调函数
异步编程最基本的方法。
假定有两个函数f1和f2,f2等待f1的执行结果。如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函数。
Javascript异步编程方法
ES 6以前:
* 回调函数
* 事件监听(事件发布/订阅)
* Promise对象
ES 6:
* Generator函数(协程coroutine)
ES 7:
* async和await
评论