promise + yield = 异步流程掌握

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://segmentfault.com/a/1190000008942667
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞