资讯专栏INFORMATION COLUMN

promise + yield = 异步流程控制

SnaiLiu / 3178人阅读

摘要:或许你说你之前用过来做异步流程控制。那么作为一个程序好奇猫,你一定剖析过的源码吧,很好奇它怎么使用来控制的同步。

promise + yield = 异步流程控制

异步计算已经成为前后端不阻塞主线程的不二选择,无论是增加性能或是提升用户体验,anyway,这年头谁不用两下并发呢?

既然说到异步那就不得不提 promise 了,这个新的语法糖虽然建立在 callback 之上,但也好歹止住了之前愚民们疯狂跳进回调地狱的恶魔崇拜似的势头。ES的功劳一件。 或许你说你之前用过 co ?来做异步流程控制。那么作为一个程序好奇猫,你一定剖析过 co 的源码吧,很好奇它怎么使用 yield 来控制 promise 的同步。 在本文中我将以 5个语句解析之。。。 没错,就是5个语句。

sheepOut = new Promise( function(resolve) { 
    waitForTime(500); 
    resolve( log( "Eat grass" ) ) })

eatGrass = function *() {
    var ret = yield sheepOut()
    sheepBack()
}

step = eatGrass() // yield 就像坏掉的钟,拨一下,走一下。
not_done_promise = step.next() //sheepOut被异步调用了,返回一个还未结束的promise
not_done_promise.then( step.next() ) // 这句话是关键也就是说 sheepOut 未结束
//step 就一直卡在 yield, 直到 sheepOut 执行完毕,then 调用 next 进入 sheepBack.

所以整个流程是这样的
sheepOut(异步) -> yield(阻塞) -> sheepOut.then(调用next结束yield阻塞) -> sheepBack

怎么样?现在你能理解异步流程控制的技巧了没?说穿了就是靠 promise 的 then 回调 generator 的 next 来解除流程的阻塞。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82347.html

相关文章

  • 通过ES6 Generator函数实现异步流程

    摘要:换句话说,我们很好的对代码的功能关注点进行了分离通过将使用消费值得地方函数中的逻辑和通过异步流程来获取值迭代器的方法进行了有效的分离。但是现在我们通过来管理代码的异步流程部分,我们解决了回调函数所带来的反转控制等问题。 本文翻译自 Going Async With ES6 Generators 由于个人能力知识有限,翻译过程中难免有纰漏和错误,还望指正Issue ES6 Gener...

    刘厚水 评论0 收藏0
  • 异步流程控制:7 行代码学会 co 模块

    摘要:而在中是迭代器生成器,被创造性的拿来做异步流程控制了。当执行的时候,并不执行函数体,而是返回一个迭代器。行代码再看看文章开头的行代码首先生成一个迭代器,然后执行一遍,得到的是一个对象,里面再执行。 广告招人:阿里巴巴招前端,在这里你可以享受大公司的福利和技术体系,也有小团队的挑战和成长空间。联系: qingguang.meiqg at alibaba-inc.com 首先请原谅我的标题...

    tinna 评论0 收藏0
  • ES6中的异步编程:Generators函数+Promise:最强大的异步处理方式

    摘要:更好的异步编程上面的方法可以适用于那些比较简单的异步工作流程。小结的组合目前是最强大,也是最优雅的异步流程管理编程方式。 访问原文地址 generators主要作用就是提供了一种,单线程的,很像同步方法的编程风格,方便你把异步实现的那些细节藏在别处。这让我们可以用一种很自然的方式书写我们代码中的流程和状态逻辑,不再需要去遵循那些奇怪的异步编程风格。 换句话说,通过将我们generato...

    Taonce 评论0 收藏0
  • JavaScript异步流程控制的前世今生

    摘要:后面跟着的应该是一个对象其他返回值也可以,只是会立即执行捕获错误参考文章函数的含义与用法 JavaScript异步流程控制的前世今生 showImg(https://segmentfault.com/img/remote/1460000012892876?w=600&h=338); javascript在设计之初.为了避免资源管理复杂问题(多个线程同时操作dom,以哪个为准),因此被设...

    刘明 评论0 收藏0
  • 《Node.js设计模式》基于ES2015+的回调控制

    摘要:以下展示它是如何工作的函数使用构造函数创建一个新的对象,并立即将其返回给调用者。在传递给构造函数的函数中,我们确保传递给,这是一个特殊的回调函数。 本系列文章为《Node.js Design Patterns Second Edition》的原文翻译和读书笔记,在GitHub连载更新,同步翻译版链接。 欢迎关注我的专栏,之后的博文将在专栏同步: Encounter的掘金专栏 知乎专栏...

    LiuRhoRamen 评论0 收藏0

发表评论

0条评论

SnaiLiu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<