Para executar uma função assíncrona dentro de um map() para realizar uma operação em cada Elemento do array e obter os resultados de volta:
const lista = [1, 2, 3, 4, 5] //...um array com os valores
const functionWithPromise = item => { //uma função qualquer que retorna uma promessa
return Promise.resolve(item + 'ok')
}
const anAsyncFunction = async item => {
return functionWithPromise(item)
}
///// Seu código de interesse é o seguinte:
const getData = async () => {
return Promise.all(lista.map(item => anAsyncFunction(item)))
}
getData().then(data => {
console.log(data)
})
A principal coisa a notar é o uso de Promise.all (), que resolve quando todas as suas promessas são cumpridas.
lista.map () retorna uma lista de promessas, então, como resultado, obteremos o valor quando tudo o que executamos for resolvido
getData().then irá executar quando todas as promessas forem resolvidas. Ideal para realizar a operação somente quando o lista.map() concluir.
Lembre-se de que devemos agrupar qualquer código que as chamadas aguardam em uma função assíncrona.
0 Comentários