JS异步编程有哪些方案

发布时间:2021-08-25 16:45:29 作者:chen
来源:亿速云 阅读:119

这篇文章主要讲解了“JS异步编程有哪些方案”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS异步编程有哪些方案”吧!

关于 JS 单线程、EventLoop 以及异步 I/O  这些底层的特性,我们之前做过了详细的拆解,不在赘述。在探究了底层机制之后,我们还需要对代码的组织方式有所理解,这是离我们最日常开发最接近的部分,异步代码的组织方式直接决定了开发和维护的效率,其重要性也不可小觑。尽管底层机制没变,但异步代码的组织方式却随着  ES 标准的发展,一步步发生了巨大的变革。接着让我们来一探究竟吧!

回调函数时代

相信很多 nodejs 的初学者都或多或少踩过这样的坑,node 中很多原生的 api 就是诸如这样的:

fs.readFile('xxx', (err, data) => {  });

典型的高阶函数,将回调函数作为函数参数传给了readFile。但久而久之,就会发现,这种传入回调的方式也存在大坑, 比如下面这样:

fs.readFile('1.json', (err, data) => {     fs.readFile('2.json', (err, data) => {         fs.readFile('3.json', (err, data) => {             fs.readFile('4.json', (err, data) => {              });         });     }); });

回调当中嵌套回调,也称回调地狱。这种代码的可读性和可维护性都是非常差的,因为嵌套的层级太多。而且还有一个严重的问题,就是每次任务可能会失败,需要在回调里面对每个任务的失败情况进行处理,增加了代码的混乱程度。

Promise 时代

ES6 中新增的 Promise 就很好了解决了回调地狱的问题,同时了合并了错误处理。写出来的代码类似于下面这样:

readFilePromise('1.json').then(data => {     return readFilePromise('2.json') }).then(data => {     return readFilePromise('3.json') }).then(data => {     return readFilePromise('4.json') });

以链式调用的方式避免了大量的嵌套,也符合人的线性思维方式,大大方便了异步编程。

co + Generator 方式

利用协程完成 Generator 函数,用 co 库让代码依次执行完,同时以同步的方式书写,也让异步操作按顺序执行。

co(function* () {   const r1 = yield readFilePromise('1.json');   const r2 = yield readFilePromise('2.json');   const r3 = yield readFilePromise('3.json');   const r4 = yield readFilePromise('4.json'); })

async + await方式

这是 ES7 中新增的关键字,凡是加上 async 的函数都默认返回一个 Promise 对象,而更重要的是 async + await  也能让异步代码以同步的方式来书写,而不需要借助第三方库的支持。

const readFileAsync = async function () {   const f1 = await readFilePromise('1.json')   const f2 = await readFilePromise('2.json')   const f3 = await readFilePromise('3.json')   const f4 = await readFilePromise('4.json') }

这四种经典的异步编程方式就简单回顾完了,由于是鸟瞰大局,我觉得知道是什么比了解细节要重要,  因此也没有展开。

感谢各位的阅读,以上就是“JS异步编程有哪些方案”的内容了,经过本文的学习后,相信大家对JS异步编程有哪些方案这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. js中常用模块化方案有哪些
  2. 新手如何快速理解js异步编程

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

js

上一篇:Tomcat如何进行并发编程

下一篇:SIP和XMMP的区别

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》