Javascript 带并行限制的runn承诺
所以,我尝试运行N个有并行计数限制的承诺。例如,我想让3个承诺在我的程序运行时等待回调。没有更多,但仍然可能是一种情况,当2个承诺在起作用时(例如-N=5,3个并行,因此在程序结束时只有2个承诺,这是可以的) 如果没有Javascript 带并行限制的runn承诺,javascript,promise,coffeescript,Javascript,Promise,Coffeescript,所以,我尝试运行N个有并行计数限制的承诺。例如,我想让3个承诺在我的程序运行时等待回调。没有更多,但仍然可能是一种情况,当2个承诺在起作用时(例如-N=5,3个并行,因此在程序结束时只有2个承诺,这是可以的) 如果没有yield sleep 1此代码不起作用,它将启动3个funcs add,记录3“#{name about to create}”,仅此而已。只要您可以等待,程序将保持此状态 但是使用yield sleep 1它可以正常工作 为什么? co=需要“co” 承诺=需要“蓝鸟” 进行中
yield sleep 1
此代码不起作用,它将启动3个funcs add,记录3“#{name about to create}”,仅此而已。只要您可以等待,程序将保持此状态
但是使用yield sleep 1
它可以正常工作
为什么?
co=需要“co”
承诺=需要“蓝鸟”
进行中=0
检查\u num=0
检查列表=[]
添加=(名称)->
console.log“#{name}即将创建”
进行中++
新承诺(解决、拒绝)->
setTimeout()->
console.log“#{name}已完成”
进行中--
解析(名称)
, 3000
睡眠=(t)->
新承诺(解决、拒绝)->
设置超时->
解决()
T
运行=()->co->
而检查_num<5
console.log“正在进行:#{in_progress}”
如果进行中<3
checks_list.push add(“n#{check_num++}”)
#产量睡眠1
运行()。然后()->
console.log检查\u列表
承诺。所有支票都在清单上
.然后()->
console.log检查\u列表
这个问题重复了,但用俄语 如果没有
yield
ing,您就有一个无限循环。setTimeout
回调永远不会发生,承诺永远不会解决,循环计数器永远不会改变。使用yield sleep 1
,循环在每次迭代中都会被中断,从而允许其他事情发生,这最终会减少进行中的,并允许创建更多的add
承诺,直到check\u num
为5
请注意,因为您使用的是Bluebird,所以您不需要这些,甚至不需要co
:
Promise = require "bluebird"
add = Promise.coroutine (name) ->
console.log "#{name} about to create"
yield Promise.delay 3000
console.log "#{name} completed"
Promise.map ("n#{check_num}" for check_num in [0..5]),
add,
concurrency: 3
.then ->
console.log "all done"
Promise = require "bluebird"
add = Promise.coroutine (name) ->
console.log "#{name} about to create"
yield Promise.delay 3000
console.log "#{name} completed"
Promise.map ("n#{check_num}" for check_num in [0..5]),
add,
concurrency: 3
.then ->
console.log "all done"