此刻我有一个网页,其中有一长串 Axios POST 调用。现在,请求似乎是并行发送的(JavaScript 在收到结果之前继续发送下一个请求)。
不过结果好像是一个一个返回的,不是同时返回的。假设对 PHP 脚本的一次 POST 调用需要 4 秒,而我需要进行 10 次调用。目前每次通话需要 4 秒,总共需要 40 秒。我希望找到两者的解决方案,并在大约同时(~4 秒)而不是~40 秒内收到所有结果。
现在我已经阅读了有关使用 Workers 的 NodeJS 中的线程和多线程的信息。我读过 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!' );
}
原文由 Z0q 发布,翻译遵循 CC BY-SA 4.0 许可协议
通过三种情况你可以实现你的目标。
Axios.all()
您可以使用
Promise.allSettled()
。 Promise.allSettled() 方法返回一个承诺,该承诺在所有给定的承诺都已解决或拒绝后解决,您可以尝试使用
Promise.all()
但它的缺点是,如果任何 1 个 请求失败,那么它将全部失败并给出 o/p 作为错误(或在 catch 块中)但最好的情况是第一个。