如何正确地将async / await axios响应保存到变量中

时间:2019-08-12 01:00:18

标签: javascript node.js express

第三方API一次只能处理一个查询字符串。所以我正在尝试采用多个字符串并拆分为数组。然后,我将遍历数组,进行异步/等待axios调用,并将每个响应对象推入一个空数组。

使用下面的代码,数据似乎没有存储在最后。我最好的猜测是我不了解如何正确使用异步/等待功能。有人可以帮我吗?

app.get("/api/posts", (req, res) => {
  const tags = req.query.tags;
  const fetchData = [];

  const axiosCall = async tag => {
    const response = await axios.get(
      `https://hatchways.io/api/assessment/blog/posts?tag=${tag}`
    );
    fetchData.push(response.data);
    //returns correct response object in an array
    console.log(fetchData);
  };

  tags.split(",").length > 1
    ? tags.split(",").map(tag => {
        axiosCall(tag);
      })
    : axiosCall(tags);

  //Returns empty array
  res.send(fetchData);
});

1 个答案:

答案 0 :(得分:0)

由于axiosCall是异步的,因此您需要等待Promise解析

像这样

app.get("/api/posts", (req, res) => {
    const tags = req.query.tags;

    const axiosCall = async tag => {
        const response = await axios.get(`https://hatchways.io/api/assessment/blog/posts?tag=${tag}`);
        return response.data;
    };

    Promise.all(tags.split(",").length > 1 ? tags.split(",").map(axiosCall) : [axiosCall(tags)])
    .then(fetchData => res.send(fetchData));
});

或在任何地方使用异步/等待

app.get("/api/posts", async (req, res) => {
    const tags = req.query.tags;

    const axiosCall = async tag => {
        const response = await axios.get(`https://hatchways.io/api/assessment/blog/posts?tag=${tag}`);
        return response.data;
    };

    const fetchData = await Promise.all(tags.split(",").length > 1 ? tags.split(",").map(axiosCall) : [axiosCall(tags)]);
    res.send(fetchData);
});