gpt4 book ai didi

javascript - 如何同时调用api?

转载 作者:行者123 更新时间:2023-12-03 12:48:10 24 4
gpt4 key购买 nike

我有一个同步调用我的 API 的异步函数,但 Promise.all() 对我来说大约 2 秒后解析(一个请求在大约 200 毫秒内解析)。这意味着我的请求一个接一个地解决,即使它们开始是异步的,也不会同时解决。

// don't run in client side of browser - CORS
async asyncData () {
axios.interceptors.request.use(config => {
console.log('Start: ', new Date)
return config
})
const promise1 = axios.get('https://jsonplaceholder.typicode.com/comments')
const promise2 = axios.get('https://jsonplaceholder.typicode.com/posts')
const promise3 = axios.get('https://jsonplaceholder.typicode.com/todos')
const promise4 = axios.get('https://jsonplaceholder.typicode.com/users')
const promise5 = axios.get('https://jsonplaceholder.typicode.com/photos')
const promise6 = axios.get('https://jsonplaceholder.typicode.com/photos')
const promise7 = axios.get('https://jsonplaceholder.typicode.com/photos')
const promise8 = axios.get('https://jsonplaceholder.typicode.com/photos')
const promise9 = axios.get('https://jsonplaceholder.typicode.com/photos')
await Promise.all([
promise1,
promise2,
promise3,
promise4,
promise5,
promise6,
promise7,
promise8,
promise9,
]).then(data => {
console.log('End: ', new Date)
})
}

我很困惑,因为下面这段代码在 4000 毫秒内解析,这意味着它们同时开始并在最大超时结束后解析 - 4000。这次 Promises 没有在链中解析

    async asyncData () {
function startTimer (time) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve()
}, time)
})
}

console.time('Timer')
Promise.all([
startTimer(1000),
startTimer(4000),
startTimer(2000),
]).then(function () {
console.timeEnd('Timer')
})
}

附言抱歉英语不好¯\_(ツ)_/¯

最佳答案

您的代码没问题。问题是大量并发的网络请求,尤其是向同一端点发出的请求,通常比只发出一个请求需要更长的时间来解决 - 即使您并行发出所有这些请求。以下是请求的 Chrome devtools 屏幕截图:

enter image description here

如您所见,所有请求被立即触发,但后续请求需要更长的时间才能解决。这通常是由端点(此处为 jsonplaceholder)限制请求引起的。

如果您向您的自己的服务器发出请求,并且您的服务器和脚本源都有足够的带宽、连接性并且没有节流,那么并行请求将至少在接近同一时间解析.

(浏览器可能会限制任何时候允许的连接总数,操作系统也是如此)

关于javascript - 如何同时调用api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59473714/

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