Promise.all for array.map with axios

Promise.all for array.map with axios

我想做的事情: 我有一系列书名。例如

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

对于这个数组,我想通过 axios 调用 API 并获取每个标题的详细信息。

到目前为止我做了什么: 为此,我创建了一个 array.map 请求,它调用包装到异步函数中的 axios。

axios 异步函数如下所示:

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,它返回正确的数据。因此 axios 似乎有效

与 promise.all 的异步如下所示:

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 / await 没有按预期工作。

我需要帮助的地方:如何在 "ArrayOfResults" 中的此设置中从 Axios API 调用中获取实际值?

您不会在 map 中返回 axiosWrapper。 你应该这样做:

async function mapWrapper(ArrayToRunThrough){

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

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