使用MovieDB API遇404错误时,如何用JS刷新页面或重跑代码
解决MovieDB API 404错误的重试逻辑实现
原代码未处理HTTP错误状态,也没有针对无效ID的重试机制。以下是修改后的实现,包含404自动重试、最大重试次数限制,同时完善了异常处理:
// 设定最大重试次数,防止无限循环 const MAX_RETRIES = 3; // 生成随机电影ID(可根据MovieDB实际ID范围调整数值) function getRandomMovieId() { return Math.floor(Math.random() * 10000) + 1; } // 带重试逻辑的API请求函数 async function fetchMovieGenres(retryCount = 0) { try { const movieId = getRandomMovieId(); // 替换为你的MovieDB API地址,记得带上API密钥 const apiUrl = `https://api.themoviedb.org/3/movie/${movieId}?api_key=YOUR_API_KEY`; const response = await fetch(apiUrl); // 遇到404且未达最大重试次数时,递归重试 if (response.status === 404 && retryCount < MAX_RETRIES) { console.log(`ID ${movieId}无效,第${retryCount + 1}次重试中...`); return fetchMovieGenres(retryCount + 1); } // 处理其他非成功的HTTP状态 if (!response.ok) { throw new Error(`请求失败,状态码: ${response.status}`); } const data = await response.json(); const genres = data.genres; const userGenre = document.getElementById("input").value; genres.forEach(genre => { console.log(genre.name); // 这里可添加用户输入与影片类型的匹配逻辑 }); return data; } catch (err) { console.error(`已重试${MAX_RETRIES}次,请求仍失败:`, err); // 重试失败后可提示用户 alert("无法获取有效影片数据,请稍后再试"); } } // 调用函数启动请求 fetchMovieGenres();
核心逻辑说明
- 重试次数控制:通过
MAX_RETRIES限制重试次数,避免无限请求导致API限流或页面卡顿 - 无效ID检测:捕获404状态码后自动触发重试,直到拿到有效数据或达到重试上限
- 异常处理:覆盖非404的HTTP错误(如500、401),避免程序崩溃
- 代码拆分:将随机ID生成与请求逻辑分离,便于后续维护和调整ID范围
内容的提问来源于stack exchange,提问作者Rebja A.
相关产品推荐
相关产品推荐

