Promise.all для array.map с axios - PullRequest
       22

Promise.all для array.map с axios

1 голос
/ 19 апреля 2020

Что я хотел бы сделать: У меня есть массив названий книг. например,

var bookTitleArray = ["1984", "clockwork Orange"];

Для этого массива я хотел бы вызвать API через ax ios и получить подробную информацию о каждом заголовке.

Что я сделал до сих пор: Для этого я создал запрос array.map, который вызывает ax ios, который заключен в асин * c функцию.

Функция axe ios asyn c выглядит следующим образом:

async function axiosWrapper (Item){
    var ItemPromise = axios.request({
            url: 'some URL',
            method: 'get',
            baseURL: 'some URL',
            headers: {
                'Authorization': 'some authorization'
            }
          })
    var axiosResult = await ItemPromise;
    return axiosResult
}

У меня есть console.logged axiosResult, и он возвращает нужные данные обратно. Следовательно, топор ios, кажется, работает

Асин c с обещанием. Все выглядит следующим образом:

async function mapWrapper(ArrayToRunThrough){

    var promiseArray = ArrayToRunThrough.map(Item => {
        axiosWrapper(Item)
    })

    var ArrayOfResults = await Promise.all(promiseArray);
    console.log(ArrayOfResults);
}

В конце я вызываю mapWrapper с массивом книг Я хотел бы искать

mapWrapper(bookTitleArray)

Что я испытал: К сожалению, я получаю только два массива "undefined".

Мое предположение: Я предполагаю, что Promise.all / ждет, чтобы работать не так, как ожидалось.

Где мне нужна помощь: Как я могу получить фактические значения из вызова Ax ios API в этой настройке в «ArrayOfResults»?

1 Ответ

1 голос
/ 20 апреля 2020

Вы не возвращаете axiosWrapper в вашем map. Вы должны сделать:

async function mapWrapper(ArrayToRunThrough){

    var promiseArray = ArrayToRunThrough.map(Item => {
        return axiosWrapper(Item)
    })

    var ArrayOfResults = await Promise.all(promiseArray);
    console.log(ArrayOfResults);
}
...