是否有办法从多个API路由中获取数据在一个单一的getServerSideProps()延迟?
我遇到了一个429错误(太多的请求),当我试图从多个端点一次与Promise.all()
获取数据。
是否有任何方法,我可以用它来获取多个数组端点在1秒延迟每个?
async function getClients () {
const res = await fetch('http://localhost:3000/api/clients')
const json = await res.json()
return Object.entries(json)
}
async function getDetails (clients) {
const details = await Promise.all(
clients.map(async (item) => {
const url = 'http://localhost:3000/api/clients/' + item.clientId;
const res = await fetch(url)
const json = await res.json()
return json
})
)
return details
}
export async function getServerSideProps() {
const clients = await getClients()
const details = await getDetails(clients)
return {
props: {
clients,
details,
},
}
}
你可以尝试使用async-sema包中的速率限制器。
同样值得注意的是,你应该避免从你的getServerSideProps
函数调用你的Nextjs API路由。因为它已经在服务器上运行,你可以直接执行API路由中的任何逻辑,避免额外的网络跳。
import { RateLimit } from "async-sema";
async function getClients () {
const res = await fetch('http://localhost:3000/api/clients')
const json = await res.json()
return Object.entries(json)
}
async function getDetails (clients) {
const lim = RateLimit(5);
const details = await Promise.all(
clients.map(async (item) => {
await lim();
const url = 'http://localhost:3000/api/clients/' + item.clientId;
const res = await fetch(url)
const json = await res.json()
return json
})
)
return details
}
export async function getServerSideProps() {
const clients = await getClients()
const details = await getDetails(clients)
return {
props: {
clients,
details,
},
}
}