为什么'await'在NextJS API Routing中不做任何事情?

yk9xbfzb  于 2023-03-29  发布在  其他
关注(0)|答案(1)|浏览(282)

我正在尝试从NextJS Api Route获取YouTube Data API中的数据(这意味着是一个cron函数)。
我在获取数据时使用了await关键字(getPlaylistData()函数),但我总是得到res未定义的错误。API调用在没有console.log(res.status)的情况下通过并返回status 200,所以我知道API调用是好的。
此外,我在service. playlistItems. list的回调中的console.log()函数中获得了正确的输出。console.log(res.status)似乎在getPlaylistData()函数完成之前运行。
我是否误解了async/await的工作方式?任何建议都很感激。提前感谢!
其他一些可能有帮助的信息:操作系统:Windows 11NextJS 13(Beta),启用了应用程序目录IDE:WebStorm我正在使用Postman测试API路由调用。

代码

const {google} = require('googleapis')

const service = google.youtube('v3');
export async function GET() {
    const res = await getPlaylistData()
    // console.log(res.status);
    return new Response("Success", {
        status:200
    })
}

async function getPlaylistData() {
    const dataRes = await service.playlistItems.list({
        auth: process.env.API_KEY,
        part: "snippet,contentDetails,status",
        playlistId: process.env.UPLOADS_ID,
    }, function(err:any, res:any) {
        if (err) {
            console.log("The API returned an error: " + err);
            return;
        }
        let playlistItems = res.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;
}
ippsafx7

ippsafx71#

从getPlaylistData函数返回Promise起作用。

async function getPlaylistData() {
    return new Promise((resolve, reject) => {
        service.playlistItems.list({
            auth: process.env.API_KEY,
            part: "snippet,contentDetails,status",
            playlistId: process.env.UPLOADS_ID,
        }, async function(err:any, res:any) {
            if (err) {
                console.log("The API returned an error: " + err);
                return;
            }
            let playlistItems = res.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(playlistItems)
            }
            console.log(typeof(res))
            resolve(res)
        })
    })
}

相关问题