рекурсивная функция с использованием API Gmail, возвращающая тот же результат - PullRequest
0 голосов
/ 13 июля 2020

Ниже приводится рекурсивная функция, которая регистрирует данные, полученные из API Gmail.

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);
        }
    })
}

Вместо того, чтобы печатать токены следующей страницы, функция последовательно печатает один и тот же токен страницы. Первый вызов должен go без какого-либо токена страницы, в то время как последовательные вызовы берут токен, указанный в ответе на предыдущий вызов, и печатают токен следующей страницы. Что я делаю не так и как это исправить?

Пример необходимого вывода: token1 token2 token3. . . tokenN

Пример текущего вывода: token1 token1 token1 token1. . . .

1 Ответ

1 голос
/ 13 июля 2020

На основе 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);
        }
    })
}
...