Запуск N Promise параллельно с потоком в k Promise

158
19 января 2019, 02:50

Итак, я пытаюсь написать программу, запускающую N Promise с потоком в k Promise параллельно. Проблема в том, что при запуске без yield sleep 1 программа запускает 3 параллельных Promise, при этом не выполняя их. С yield sleep 1 всё работает нормально. Так же программа будет работать корректно, если N = k, т.е. если мы хотим запустить все Promise одной пачкой.

Вопрос: почему yield sleep 1 решает проблему? Я понимаю, что уменьшаю количество сравнений в ~1000000 раз с помощью него, но все же непонятно, почему без 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
READ ALSO
Как задать срок хранения ключа?

Как задать срок хранения ключа?

Как задать срок хранения ключа? как предотвратить появление модального окна после закрытия а потом октрытия браузера?

137
Как получить ассоциативный массив jquery?

Как получить ассоциативный массив jquery?

Нужна помощь с jsЕсть таблица, по нажатию кнопки все элементы строки попадают в массив

203
TrezorConnect и web3.eth.sendRawTransaction

TrezorConnect и web3.eth.sendRawTransaction

Реализую транзакцию с подписью трезораНо получаю ошибку о том, что недостаточно средств, хотя на обоих кошельках есть ethereum

114