Итак, я пытаюсь выполнить N обещаний с параллельным ограничением числа.Я хочу, например, 3 обещания, ожидающих обратного вызова, пока моя программа работает.Не более, но все же может быть ситуация, когда 2 обещания на работе (пример - N = 5, 3 параллельно, поэтому в конце программы будет только 2 обещания, и все нормально)
Безyield sleep 1
этот код не работает, он запустит 3 функции add, войдите в 3 "# {name about to create}" и все.Программа будет оставаться в этом состоянии до тех пор, пока вы можете ждать.
Но с yield sleep 1
работает нормально.
Почему?
co = require 'co'
Promise = require "bluebird"
in_progress = 0
check_num = 0
checks_list = []
add = (name) ->
console.log "#{name} about to create"
in_progress++
new Promise (resolve, reject) ->
setTimeout () ->
console.log "#{name} completed"
in_progress--
resolve(name)
, 3000
sleep = (t) ->
new Promise (resolve, reject) ->
setTimeout ->
resolve()
, t
run = () -> co ->
while check_num < 5
console.log "in progress: #{in_progress}"
if in_progress < 3
checks_list.push add("n#{check_num++}")
# yield sleep 1
run().then () ->
console.log checks_list
Promise.all checks_list
.then () ->
console.log checks_list
PSTЭтот вопрос дублирует это , но на русском языке.