Async: Você pode usar async.series com async / await?

Criado em 4 nov. 2017  ·  11Comentários  ·  Fonte: caolan/async

Você pode usar async await dentro da função async.series?

Fiz alguns experimentos simples, mas não funcionaram como esperado.

docs question

Comentários muito úteis

Há alguma ciência maluca planejada. 😉

Todos 11 comentários

Sim você pode! Mas, em vez de usar um retorno de chamada, basta retornar um valor ou lançar um erro. http://caolan.github.io/async/global.html

Ok - por favor, me perdoe Se eu interpretar mal alguma coisa 😄 Assim?

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

Como as funções async convertem automaticamente erros em rejeições, a menos que você queira fazer algo especial com o erro, seu exemplo pode ser reduzido a:

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

Obrigado pelo trecho aprimorado. Parece funcionar em um cenário simples, mas na configuração a seguir não consigo fazer funcionar:

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

Eu achava que o loop for-of permitiria operações assíncronas.

Visto que async.each não retorna uma promessa, você não pode await it.

Ahh, certo. Portanto, usar a opção for-of async / await não é um bom padrão com async. Você sabe agora se isso está no roteiro para assíncrono?

Há alguma ciência maluca planejada. 😉

Ou util.promisify() 😉

(ou pify() )

Por que isso vai de uma pergunta sobre async.series para 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 Ei fen, você poderia me dizer qual versão extracly suporta async / await?
Estou usando caolan / async versão 2.6.0

Esta página foi útil?
0 / 5 - 0 avaliações