const fetchSpamMessages = (auth, messageIds = [], pageToken = "") => { return new Promise((resolve, reject) => { let args = { includeSpamTrash: true, userId: "me", labelIds: ["SPAM"] }; if (pageToken) { args = Object.assign({}, args, { pageToken }); } const gmail = google.gmail({ version: "v1", auth }); gmail.users.messages.list(args, (err, res) => { if (err) return reject(err); messageIds = _.concat( messageIds, _.map(res.data.messages, message => message.id) ); if (res.data.nextPageToken && pageToken !== res.data.nextPageToken) return resolve( fetchSpamMessages(auth, messageIds, res.data.nextPageToken) ); return resolve(messageIds); }); }); }