gmail API的递归函数返回相同的结果

时间:2020-07-13 11:29:42

标签: node.js recursion output gmail-api

跟踪是一个递归函数,它记录从gmail api提取的数据。

function listAllMessages(auth, nextPageToken = ''){
    const gmail = google.gmail({version: 'v1', auth});
    let options = {
        userId: 'me',
        nextPageToken: nextPageToken,
    }
    gmail.users.messages.list(options, (err, res) => {
        if (err) return console.log("ListAllMessages returned an error" + err);
//        console.log(res.data);
        if(res.data.nextPageToken){
            console.log(res.data.nextPageToken);
            listAllMessages(auth, res.data.nextPageToken);
        }
    })
}

该功能不是连续打印下一页标记,而是连续打印相同的页面标记。第一个呼叫必须没有任何页面令牌,而连续的呼叫将使用上一个呼叫的响应中给出的令牌并打印下一页的令牌。我在做什么错,该如何解决?

所需输出示例: 令牌1 令牌2 令牌3 。 。 。 令牌N

电流输出示例: 令牌1 令牌1 令牌1 令牌1 。 。 。

1 个答案:

答案 0 :(得分:1)

基于gmail.users.messages.list api,您应该使用pageToken发出请求,而应使用nextPageToken

将代码更改为此

function listAllMessages(auth, nextPageToken = ''){
    const gmail = google.gmail({version: 'v1', auth});
    let options = {
        userId: 'me',
        pageToken: nextPageToken,
    }
    gmail.users.messages.list(options, (err, res) => {
        if (err) return console.log("ListAllMessages returned an error" + err);
        if(res.data.nextPageToken){
            console.log(res.data.nextPageToken);
            listAllMessages(auth, res.data.nextPageToken);
        }
    })
}