【问题标题】:How to combine every looping axios post call response into one object?如何将每个循环的 axios post 调用响应组合到一个对象中?
【发布时间】:2023-01-14 21:19:02
【问题描述】:

我正在尝试根据较早的响应在同一 URL 中使用不同的有效负载发送多个发布请求,并期望将一个组合对象作为最终结果存储到单个变量中以供进一步使用。为了这

for (let i = 0; i <= length; i++) {
        const postBody2 = {
          PropertyGuid: availableSpot[i].propertyguid,
          ZoneGuid: availableSpot[i].zoneguid,
          BookingStartUTC: "2022-11-10T18:15:00",
          BookingEndUTC: "2022-11-10T20:15:00",
          FilterAmenities: "",
          SpotGuid: null,
          UnitGuid: null,
        };
       
        let promises = [];
        promises.push(
          await axios
            .post(searchZoneUrl, postBody2, requestMetadata2)
            .then((response) => {
              // do something with response
              console.log(response.data);
            })
        );

这是我当前的输出:

这是预期的输出:

【问题讨论】:

  • 您只是在寻找一系列响应吗?您当前的代码应该给您。在上面,您正在记录各个响应,但是 promises 应该包含您期望的响应数组。尝试在循环后记录它,以验证。

标签: javascript promise


【解决方案1】:

尝试在 for 循环之后使用 Promise.all()。这将等到您所有的 http 请求都完成。然后它将它们与所有响应捆绑在一起。

let promises = [];
for (let i = 0; i <= length; i++) {
  const postBody2 = {
    PropertyGuid: availableSpot[i].propertyguid,
    ZoneGuid: availableSpot[i].zoneguid,
    BookingStartUTC: "2022-11-10T18:15:00",
    BookingEndUTC: "2022-11-10T20:15:00",
    FilterAmenities: "",
    SpotGuid: null,
    UnitGuid: null,
  };

  promises.push(
    axios.post(searchZoneUrl, postBody2, requestMetadata2)
  );
}

Promise.all(promises).then((response) => console.log('response:', response))

Promise API 上的文档有不同的方式来解决承诺数组,您可以在这里查看:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

【讨论】:

  • 仍然得到相同的结果。如何将每个响应捆绑在一起并使其成为一个最终响应?那是我的目标。
  • @Rajesh 你确定你已经尝试过这个解决方案了吗?使用 Promise.all() 时,已解决的承诺将返回一组响应(代码中的 response 将是一个数组):与您的预期结果相匹配。
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多