我的网站

         
当前位置: 主页 > 我的网站23 >

丁鹿学堂:js异步解决方案分析之generator

时间:2024-02-10 10:50 来源:网络整理 转载:我的网站

协程

协程是一种基于线程之上,但又比线程更加轻量级的存在。对内核来说具有不可见性。

一个进程可以有多个线程。一个线程可以有多个协程。

generator函数

generator就是生成器函数。是协程在es6中的一个实现。它最大的特征就是可以交出函数的执行权。

generator函数的执行和传统的不一样,它的返回值是一个迭代器对象。

简单理解就是返回值是一个对象,有两个属性,一个是value,一个是done,vlaue就是返回的值,done就是是不是可以继续迭代。

generator的写法:

1.generator相对于普通函数在function后面多加了*号

2.在每个我们需要中断执行的语句前加了yield,通过yield来控制函数执行。也就是说他的返回值每次调用next只会执行第一个yield后面的代码,如果需要继续执行,需要调用返回的迭代器的next方法

如果没有yield了,会返回{value: undefined, done:true}

通过自动执行器去自动执行generator解决异步问题

所谓的自动执行,其实就是利用迭代器的每次next都会指向下一个迭代对象。

如果done 为true则表示没有下一个了。

所以我们利用判断done+递归,实现generator的自动执行。

总结:

其实generator在我们实际开发中比较不常见,因为他本身当时主要用于js 的异步解决方案,但是后来被更好的async await替代了,async await也是js异步的终极解决方案。但是generator独特的特性可以让我们在函数执行的过程中传递参数获取结果,使得函数调用变得更加灵活。

我们了解一下,对我们以后阅读源码,进阶都是很有帮助的,面试的时候除了async -await 之前再聊一聊generator也是加分项!