美文网首页
Generator函数用于异步操作

Generator函数用于异步操作

作者: XJBT | 来源:发表于2018-10-16 15:51 被阅读14次

Generator函数之所以可以用于异步操作是因为yield关键字,Generator函数在执行过程中遇到yield语句时就会暂停执行,并返回yield语句后面的内容,要想继续执行后续的代码就需要手动调用next方法。这样就找到了顺序执行异步操作的方法了,也就是将所有异步操作都放在yield关键字后面,同时在异步操作内配置相应的next方法,以便在异步操作结束后返回出操作的结果并交出执行权,来看下面这个例子,我们要读取多个文件的内容并输出,但是要求是必须先读完a.txt中的内容,打印出来以后再读取b.txt,最后是c.txt的内容,一般的回调写法如下:

读取多个文件操作 我们可以发现随着读取文件数目的增多,代码横向发展严重,也就是常说的callback hell不利于代码维护,那么用Generator函数怎么写呢? Generator函数改写读取文件操作 在这里我特意在read函数中设置了setTimeout以便观察读取的先后顺序(因为文件都很小,读取速度太快),执行结果如下图所示: 执行结果 可以发现我们通过封装read函数,再在reader这个Generator函数中调用他,从而达到了将异步操作写成了同步的形式,避免了callback hell现象,即使读取再多的文件也不会出现横向发展,但是主要缺点就在于需要自己去封装这样一个read函数,因为Generator函数中的yield只负责将执行权交出,而具体什么时候拿回执行权就需要人为控制,这也是为什么koa2中用async函数取代Generator函数的原因之一吧。
现在来分析一下封装的过程:
将读取文件的异步操作放进read函数中,等到读取操作结束时在内部调用next方法使Generator函数进行下一步操作,同时传出读取的内容。
如果不封装的话就无法确定后面操作的顺序,如下: 不封装异步操作 不封装的执行结果 进一步封装可以得到一个自执行器 自执行器

相关文章

  • Generator函数用于异步操作

    Generator函数之所以可以用于异步操作是因为yield关键字,Generator函数在执行过程中遇到yiel...

  • JS Generator 备忘与异步操作

    Generator 函数 异步操作和Async函数

  • co.js函数库

    1. Generator函数 Generator 函数就是一个封装的异步任务。异步操作需要暂停的地方,都用 yie...

  • async 函数详解

    含义 昨天学习了Generator函数用来执行异步操作,其实async函数就是Generator函数的语法糖,使用...

  • Async/Await 函数用法

    JavaScript编程异步操作解决方案:回调函数 => Promise对象 => Generator函数 => ...

  • ES6 Generator函数

    Generator函数是es6引入的异步操作函数,不同于普通函数,Generator函数可以通过yield关键字对...

  • async/await

    async 函数 ES7 标准引入了 async 函数,使得异步操作变得更加方便。 它是 Generator 函数...

  • ES6 Generator函数的next及应用

    Generator函数可以暂停函数执行,返回任意表达式的值。这样使得Generator有多重应用场景。 异步操作的...

  • async函数

    含义 ES2017标准引入了async函数,使得异步操作变得更加方便.async函数其实就是Generator函数...

  • es7-async函数

    async函数是Generator函数的语法糖。async 表示函数里面有异步操作;await 表示紧跟后面的...

网友评论

      本文标题:Generator函数用于异步操作

      本文链接:https://www.haomeiwen.com/subject/jtyhzftx.html