2017-01-20 8 views
1

Отработало часы в поиске Google и др. и др. для ответа, конечно, это просто, но как вы создаете разбиение на страницы с помощью GMail api, используя nextPageToken? то, что я делаю, не может заставить постранично работать (туда и обратно).GMail API pagination использование nextPageToken

Предположит «авторизованного пользователя» и доступ с правом областей я называю

gapi.client.load('gmail','v1',displayInbox); 

затем

function displayInbox(){ 
    var request = gapi.client.gmail.users.messages.list({ 
    'userId':'me', 
    'maxResults':10, 
    }); 

    request.execute(function(response){ 
    $.each(response.messages,function(){ 
     var messageRequest = gapi.client.gmail.users.messages.get({ 
     'userId':'me', 
     'id':this.id 
     }); 
     messageRequest.execute(appendMessageRow); 
    }); 
    }); 
} 

appendMessageRow просто выкладывает список в таблице, например,

function appendMessageRow(message){ 
    var txt = '<tr>'; 
    txt +='<td>'+getHeader(message.payload.headers, 'From')+'</td>'; 
    txt +='<td>'; 
    txt +='<a href="#message-modal-'+ message.id +'" data-toggle="modal" id="message-link-' + message.id+'">' +getHeader(message.payload.headers, 'Subject') +'</a>'; 
    txt +='</td>'; 
    txt +='<td class="text-xs-right">'+moment(parseInt(message.internalDate)).format('HH:mm')+'</td>'; 
    txt +='</tr>'; 
    $('table tbody').append(txt); 
} 

Когда я console.log request.execute я вижу nextPageToken в качестве ключа объекта То, что я не могу сделать и нужно сделать, это добавить кнопки нумерации страниц - messageRequest.execute не проходит nextPageToken плюс не кажется, что будет способ создания/получения «previousPageToken».

Извините, если это просто, но это я или есть гораздо больше, чем это? Документы API GMail выглядят очень плохо (для меня) по этому вопросу, и я не нашел ответ stackoverflow, который помогает.

Чтобы воспроизвести - как добавить кнопки разбиения на страницы и передать соответствующие переменные для вызова/вызова displayInbox().

Заранее спасибо

ответ

0

Вы можете сохранить следующую лексему страницы при каждом запросе и использовать его в следующем запросе. Если нет следующей лексемы страницы в ответ, вы знаете, что вы получили все сообщения:

function listMessages(pageToken) { 
    return new Promise(function(resolve) { 
    var options = { 
     userId: 'me', 
     maxResults: 10 
    }; 
    if (pageToken) { 
     options.pageToken = pageToken; 
    } 
    var request = gapi.client.gmail.users.messages.list(options); 
    request.execute(resolve); 
    }); 
} 

function getMessage(message) { 
    return new Promise(function(resolve) { 
    var messageRequest = gapi.client.gmail.users.messages.get({ 
     userId: 'me', 
     id: message.id 
    }); 
    messageRequest.execute(resolve); 
    }); 
} 

var pageToken; 
function displayInbox(){ 
    listMessages(pageToken).then(function (response) { 
    if (response.nextPageToken) { 
     pageToken = response.nextPageToken; // Get the next page next time 
    } else { 
     console.log('No more pages left!'); 
    } 
    if (response.messages) { 
     Promise.all(response.messages.map(getMessage)).then(function (messages) { 
     messages.forEach(appendMessageRow); 
     }); 
    } 
    }) 
} 
+0

Tholle - получил, что TY пагинация идет «вперед» - НП, но не знает, где - в какой момент получить доступ к " old 'nextPageToken, прежде чем он будет обновлен - извините, если звук толстый (ну я :)). Я могу получить «старые и новые» токены в console.log внутри displayInbox(), но я не могу получить их (или любые сохраненные данные), чтобы отправить список обратно, т. Е. «Старый/последний» токен. Новый токен всегда переопределяет любые подсказки пожалуйста? –

+0

@ RussellParrott. Я боюсь, вы не можете разбивать страницы назад в API. Вы можете хранить каждую страницу из API при переходе страницы и просто вставлять старую страницу снова, когда идете назад, не вызывая API. – Tholle

+0

Tholle - У меня получилось, что вы не можете прокручивать назад в API раньше - странно, как его называют «разбиение на страницы», предположим, что это MrG. ОК провел время, пытаясь найти нужное место, чтобы захватить переменные, чтобы «сохранить», но безрезультатно, не могли бы вы добавить 2 // строки к вашему примеру как лучшее место для их сохранения/вызова? Я использую firebase, поэтому обновление быстро и просто. Большое большое спасибо - –

 Смежные вопросы

  • Нет связанных вопросов^_^