Начиная с 12.1.0 возможна повторная проверка по требованию.
https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration
Отправка массива идентификаторов программ, как я могу аннулировать массив слагов? Я пробовал это:
export default async function handler(req, res) {
// Check for secret to confirm this is a valid request
if (req.query.secret !== process.env.NEXT_PUBLIC_SECRET_TOKEN) {
return res.status(401).json({ message: 'Invalid token' })
}
try {
const programIds: String[] = req.query.programId
programIds.map((programId) =>
await res.unstable_revalidate(`/hu/buyTicket/${programId}`)
)
return res.json({ revalidated: true })
} catch (err) {
// If there was an error, Next.js will continue
// to show the last successfully generated page
return res.status(500).send('Error revalidating')
}
}
Я получил эту ошибку:
'await' expressions are only allowed within async functions and at the top levels of modules.
@Julius htanks, это была проблема :)
Круто, я сделаю ответ, чтобы вы могли отметить вопрос как отвеченный
Отвечает ли это на ваш вопрос? Async/Await внутри Array#map()
.map
не уважает await
, даже если вы используете async
. В вашей ситуации вы получите ответ до завершения повторной проверки, то есть неправильное поведение.
Правильный метод должен включать использование Promise.all
, чтобы res.json
вызывался только после завершения всех повторных проверок, а блок try/catch
мог правильно отловить ошибку.
await Promise.all(programIds.map(async (programId) =>
await res.unstable_revalidate(`/hu/buyTicket/${programId}`)
))
Я не знаю, исправит ли это это для вас, но, просто глядя на сообщение об ошибке, ваша проблема в том, что ваш .map() не является асинхронным. Изменение: programIds.map(async (programId) => ...)