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

NextJS API路由中await未生效问题排查求助

问题分析与解决方案

核心问题是你混用了回调函数和async/await两种异步处理模式,导致await没有正确等待YouTube API请求完成。

googleapis库的方法如果传入回调函数,会以传统回调模式执行,不会返回Promise,所以await service.playlistItems.list(...)得到的dataRes是undefined——这就是console.log(res.status)报错的原因。而回调里的代码会在请求完成后异步执行,这就造成了回调日志能输出,但await没拿到结果的假象。

修复方案

1. 改用Promise模式(移除回调)

googleapis的方法在不传入回调时会返回Promise,此时await可以正确等待请求完成:

const { google } = require('googleapis')

const service = google.youtube('v3');
export async function GET() {
    try {
        const res = await getPlaylistData()
        console.log(res.status); // 现在可正常访问status
        return new Response("Success", {
            status: 200
        })
    } catch (err) {
        console.log("The API returned an error: " + err);
        return new Response("Error", {
            status: 500
        })
    }
}

async function getPlaylistData() {
    // 不传入回调,直接await返回的Promise
    const dataRes = await service.playlistItems.list({
        auth: process.env.API_KEY,
        part: "snippet,contentDetails,status",
        playlistId: process.env.UPLOADS_ID,
    })
    
    const playlistItems = dataRes.data.items;
    if (playlistItems.length === 0) {
        console.log("No playlistItems found");
    } else {
        console.log('This channel\'s latest video is: ' + playlistItems[0].snippet.title)
        console.log(typeof playlistItems)
    }
    
    return dataRes;
}

2. 统一错误处理

原来回调里的错误逻辑要改成try/catch捕获,这样能处理API请求中的所有异常,避免未处理的Promise rejection。

关键注意点

  • 给googleapis方法传回调时,它会走回调模式,不返回Promise,await无法等待其完成,直接得到undefined。
  • 只有不传回调时,方法才返回Promise,await才能正确拿到完整的响应对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:47:33