gpt4 book ai didi

javascript - 如何同时发布多个axios请求?

转载 作者:行者123 更新时间:2023-12-01 15:19:11 25 4
gpt4 key购买 nike

目前,我有一个网页,其中正在发出一长串 Axios POST 调用。现在,请求似乎是并行发送的(JavaScript 在收到结果之前继续发送下一个请求)。

但是,结果似乎是一个一个返回,而不是同时返回。假设对 PHP 脚本的一次 POST 调用需要 4 秒,而我需要进行 10 次调用。目前每次调用需要 4 秒,总共需要 40 秒。我希望找到一个解决方案并在大约相同的时间(约 4 秒)而不是约 40 秒收到所有结果。

现在我已经阅读了关于线程,NodeJS 中使用 Workers 的多线程。我读过 JavaScript 本身只是单线程的,所以它本身可能不允许这样做。

但我不确定从这里去哪里。我所拥有的只是一些想法。我不确定我是否正朝着正确的方向前进,如果是,我不确定如何在 NodeJS 中使用 Workers 并将其应用到我的代码中。我应该走哪条路?任何指导将不胜感激!

这是一小段示例代码:

for( var i = 0;  i < 10;  i++ )
{
window.axios.post(`/my-url`, {
myVar: 'myValue'
})
.then((response) => {
// Takes 4 seconds, 4 more seconds, 4 more seconds, etc
// Ideally: Takes 4 seconds, returns in the same ~4 seconds, returns in the same ~4 seconds, etc
console.log( 'Succeeded!' );
})
.catch((error) => {
console.log( 'Error' );
});

// Takes < 1 second, < 1 more second, < 1 more second, etc
console.log( 'Request sent!' );
}

最佳答案

您可以通过三种情况实现您的目标。

  • 对于 Axios 的并发请求,您可以使用 Axios.all()
     axios.all([
    axios.post(`/my-url`, {
    myVar: 'myValue'
    }),
    axios.post(`/my-url2`, {
    myVar: 'myValue'
    })
    ])
    .then(axios.spread((data1, data2) => {
    // output of req.
    console.log('data1', data1, 'data2', data2)
    }));
  • 您可以使用 Promise.allSettled() . Promise.allSettled() 方法返回一个在所有给定的 promise 都已解决或被拒绝后解决的 promise ,
  • 您可以尝试使用Promise.all()但它有一个缺点,如果有的话 1 req failed 然后它将失败并给出 o/p 作为错误(或在 catch block 中)

  • 但最好的情况是第一个。

    关于javascript - 如何同时发布多个axios请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61385454/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com