Promise小工具:PromiseQueue

Promise小工具:PromiseQueue

jamesr

jamesr

肿瘤学硕士 Linux用户 打杂码农

Javascript中的异步编程问题常常让人头疼,特别是对于接触Javascript时间不长的(比如我)。(由于讨厌Javascript罗嗦的语法,我大量使用Coffeescript写Javascript)

比如说,要做一堆异步操作,等待所有操作返回:

work1 = new Promise (ok)->
    setTimeout ->
        ok console.log '1 done'
    , 1000

work2 = new Promise (ok)->
    setTimeout ->
        ok console.log '2 done'
    , 1000

works = [work1, work2]
Promise.all works
.then ->
    console.log 'all done'

再比如说,等待其中一个操作返回:

work1 = new Promise (ok)->
    setTimeout ->
        ok console.log '1 done'
    , 1000

work2 = new Promise (ok)->
    setTimeout ->
        ok console.log '2 done'
    , 1000

works = [work1, work2]
Promise.race works
.then ->
    console.log 'some done'

最近在整理一些工具,今天提得是个小工具,它让操作排起队来,前一个结束后一个才开始:

class PromiseQueue
    constructor: ->
        @q = [] 

    then: (f)->
        console.assert f instanceof Function
        @q.push f
        this

    done: (f)->
        if f instanceof Function
            @q.push f
        @q.reduce (s, e)->
            s.then e
        , Promise.resolve()

work1 = ->
    new Promise (ok)->
        setTimeout ->
            ok console.log '1 done'
        , 1000

work2 = ->
    new Promise (ok)->
        setTimeout ->
            ok console.log '2 done'
        , 1000

q = new PromiseQueue()
q.then work1
.then work2
.done ->
    console.log 'all done'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值