【发布时间】:2020-08-06 16:10:23
【问题描述】:
此时,我有一个网页,其中正在执行一长串 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 无关。即使使用普通的
XMLHttpRequest,您也可以尝试它,您会得到相同的结果:sb-axios-xhr-conccurent。 -
参考此链接storyblok.com/tp/how-to-send-multiple-requests-using-axios 这肯定会有所帮助。
-
为什么要打多个电话?为什么你不能只发出一个 POST 请求来获取请求正文中的所有内容?您是否有权从后端更改代码?
标签: javascript node.js multithreading axios