You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从TMDB API获取total_pages及解决调用时返回undefined问题

问题分析与修复方案

导致getTotalPages()返回undefined的核心问题

1. 请求URL格式错误

你的requestParams开头没有加?,导致API路径和参数直接拼接成了类似/discover/movieapi_key=xxx的错误格式,TMDB服务器无法识别该请求,返回的响应状态非ok,函数未进入if(response.ok)分支,最终无返回值,自然返回undefined。

2. 无效的请求参数

total_pages=True是多余参数,TMDB的/discover/movie接口默认会在返回结果中包含total_pages字段,该参数会被服务器忽略,无需添加。

3. 异步函数调用未使用await

即便getTotalPages()修复正确,在getMovies()里直接调用getTotalPages()会返回一个Promise对象而非实际页码数值,导致Math.ceil(Math.random()*getTotalPages())计算出NaN,进一步引发请求错误。


修复后的代码

修复getTotalPages()函数

const getTotalPages = async () => {
  const selectedGenre = getSelectedGenre();
  const discoverMovieEndpoint = '/discover/movie';
  // 参数开头加?,移除无效的total_pages参数
  const requestParams = `?api_key=${tmdbKey}&with_genres=${selectedGenre}`;
  const urlToFetch = `${tmdbBaseUrl}${discoverMovieEndpoint}${requestParams}`;
  try {
    const response = await fetch(urlToFetch);
    if (response.ok) {
      const jsonResponse = await response.json();
      return jsonResponse.total_pages; 
    }
    // 处理响应失败的情况,避免无返回值
    throw new Error(`请求失败:${response.status}`);
  } catch(error) {
     console.log(error);
     // 错误时返回默认页码,避免后续逻辑异常
     return 1;
  }
 }

修复getMovies()函数

const getMovies = async () => {
  const selectedGenre = getSelectedGenre();
  const discoverMovieEndpoint = '/discover/movie';
  // 用await等待异步函数返回实际页码值
  const totalPages = await getTotalPages();
  const randomPage = Math.ceil(Math.random() * totalPages);
  const requestParams = `?api_key=${tmdbKey}&with_genres=${selectedGenre}&page=${randomPage}`;
  const urlToFetch = `${tmdbBaseUrl}${discoverMovieEndpoint}${requestParams}`;
  try {
    const response = await fetch(urlToFetch);
    if (response.ok) {
      const jsonResponse = await response.json();
      return jsonResponse.results; 
    }
    throw new Error(`请求失败:${response.status}`);
  } catch(error) {
    console.log(error);
    // 错误时返回空数组,避免后续逻辑异常
    return [];
  }
};

额外说明

  • 处理响应失败分支时,建议抛出错误或返回默认值,避免函数无返回值导致后续逻辑异常。
  • 如果getSelectedGenre()可能返回空值,建议添加校验逻辑,避免with_genres参数为空导致API返回不符合预期的结果。

内容的提问来源于stack exchange,提问作者chylinski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:54:23