@carroll

Асинхронный цикл JavaScript & Генераторы?

Привет!
Использую фреймворка AdonisJS, методы контроллеров которого выступают функции-генераторы.
Есть код:

* tasks() {
    let tasks = yield Task.findBy('status', 1)

    for(let task of tasks) {
      yield this.task(task)
    }
  }


Необходимо сделать так, чтобы содержимое цикла не выполняла this.task синхронно, а запустила по циклу параллельно. Вопрос - КАК?
  • Вопрос задан
  • 1418 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Если в основе фреймворка под генераторами лежат промисы, то есть идет имитация async/await, то должно помочь так:
* tasks() {
    let tasks = yield Task.findBy('status', 1)

    let promises = []
    for(let task of tasks) {
      promises.push(this.task(task))
    }
    yield Promise.all(promises)
  }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
devellopah
@devellopah
javascript - это single-thread language. ты не вызовешь параллельно this.task(task) для всех элементов массива. ассинхронность не значит, что код выполняется параллельно, он просто выполняется в non-blocking стиле. даже promise.all() не выполняется параллельно. чтобы выполнить код параллельно - нужно выполнить его в отдельном потоке(webworkers).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы