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

如何将全局变量newPageToken改为非全局并在函数中正常使用

移除全局newPageToken的实现方案

核心思路是把分页token作为显式参数在函数调用链中传递,替代全局状态共享,既消除全局变量,也能让分页逻辑的数据流更清晰可追踪。

具体修改点

  • 调整getNextTokenURL:新增入参接收当前分页token,不再读取全局变量,基于传入的token生成对应分页的请求地址
  • 调整getVideoIdsForPageToken:新增入参接收当前分页token,调用URL生成方法时传入该参数,移除对全局状态的依赖;顺手修正原代码中throw语句后console.log永远无法执行的逻辑顺序问题,以及拼写错误Errow
  • 调整getPlaylistData:给函数增加默认值为null的分页token入参,拉取第一页时不需要传参,递归请求下一页时直接把接口返回的nextPageToken作为参数传入,彻底去掉对全局变量的赋值操作

修改后的完整代码

// Next page for more results (Max 50 per page)
function getNextTokenURL(pageToken) {
    console.log(pageToken);
    return pageToken
        ? `${playlistItemsURL}&playlistId=${extractedPlaylistIDId}&pageToken=${pageToken}&key=${API_KEY}`
        : `${playlistItemsURL}&playlistId=${extractedPlaylistIDId}&key=${API_KEY}`;
}

async function getVideoIdsForPageToken(currentPageToken) {
    try {
        const { data } = await axios.get(getNextTokenURL(currentPageToken));
        const nextPageToken = data.nextPageToken;
        const videoIds = data.items.map((video) => {
            return video.contentDetails.videoId;
        });
        return { videoIds, nextPageToken };
    } catch (e) {
        if (e.response) {
            const { code, message } = e.response.data.error;
            console.log("Error while fetching videos list.");
            throw new Error(`StatusCode ${code}. Reason: ${message}`);
        } else {
            throw new Error(e.message);
        }
    }
}

// Navigates between the videos per page and adds them (Maximum 50)
async function getPlaylistData(pageToken = null) {
    try {
        const { videoIds, nextPageToken } = await getVideoIdsForPageToken(pageToken);
        const returnedVideoIds = [];
        returnedVideoIds.push(getDetailsForVideoIds(videoIds));
        const videoGroups = await Promise.all(returnedVideoIds);

        for (const group of videoGroups) {
            for (const video of group) {
                finalTotalDuration += returnedToSeconds(video.contentDetails.duration);
            }
        }

        if (nextPageToken) {
            await getPlaylistData(nextPageToken);
        }
    } catch (e) {
        console.log("Error while navigating between video pages.");
        throw new Error(e.message);
    }
}

// 初始调用直接执行即可,无需操作全局变量
// getPlaylistData()

注:原代码中HTML转义字符&已替换为JS代码中实际使用的&,避免请求地址拼接错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:39:19