Async: Можете ли вы использовать async.series с async / await?

Созданный на 4 нояб. 2017  ·  11Комментарии  ·  Источник: caolan/async

Можете ли вы использовать async await внутри функции async.series?

Я провел несколько простых экспериментов, но они не сработали так, как ожидалось.

docs question

Самый полезный комментарий

Планируется какая-то безумная наука. 😉

Все 11 Комментарий

Да, ты можешь! Но вместо использования обратного вызова просто верните значение или выдайте ошибку. http://caolan.github.io/async/global.html

Хорошо - простите меня, пожалуйста, Если я что-то неправильно понял 😄 Как это?

    const result = await async.each(openFiles, async (file) => {
        try: {
            await asyncOperation(file);
            return null
        } catch(err) {
            return err
        }
    })

Поскольку async функции автоматически преобразуют ошибки в отклонения, ваш пример можно свести к следующему:

    const result = await async.each(openFiles, async (file) => {
        await asyncOperation(file);
    })

Спасибо за улучшенный фрагмент. Кажется, это работает в простом сценарии, но в следующих настройках я не могу заставить его работать:

for (const tasks of fileTasks) {
    const result = await async.each(tasks, async (file) => {
        await asyncOperation(file);
    })
}

Я понимал, что цикл for-of допускает асинхронные операции?

Поскольку async.each не возвращает Promise, вы не можете await это.

А, ну ладно. Таким образом, использование параметра for-of async / await не является хорошим шаблоном для async. А теперь, если это входит в план развития асинхронного режима?

Планируется какая-то безумная наука. 😉

Или util.promisify() 😉

(или pify() )

Почему здесь вопрос о async.series переходит в async.each ?

const _async = require('async');
const _ = require('lodash');

public doSomething = async(num) : Promise<any> => {
     return num*num + 1;
} 

public async getResults() {
    let results = new Array<any>();
    let tasks = [];

    try {
      const list = [1,2,3,4,5,6,7,8,9,10];

      list.forEach((item) => {
        tasks.push((callback) => {
          this.doSomething(item.then(
            (res) => {
              results.push(res);
              callback(null, res);
            }
          );
        })
      })

      results = await new Promise((resolve) => {
        _async.series(tasks, (err, res) => {
          console.log(res);
          if (err) {
            results.push(err);
          }
          resolve(results);
        })
      });
    } catch (err) {
      results.push(err.message);
      console.log(err);
    }

    return _.join(results, '\r\n');
  }



@aearly Привет, фен, не могли бы вы сказать мне, какая версия extracly поддерживает async / await?
Я использую caolan / async версии 2.6.0

Была ли эта страница полезной?
0 / 5 - 0 рейтинги