NextJS getServerSideProps()一次延迟获取多个端点



是否有办法从多个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,
},
}
}

相关内容

  • 没有找到相关文章

最新更新