簡體   English   中英

如何正確地將async / await axios響應保存到變量中

[英]How to properly save async/await axios response into variable

第三方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);
});

由於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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM