2017-01-20 73 views
1

已花費數小時搜索Google et。人。對於答案,確定它很簡單,但是如何使用nextPageToken爲GMail API創建分頁?我做了什麼不能讓分頁工作(來回)。GMail API分頁使用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'的方法。

對不起,如果很簡單,但它是我還是比那更多? GMail API文檔在這個主題上看起來很差(對我來說),我還沒有找到有幫助的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分頁去「前進」 - NP,但不知道在哪裏 - 此時訪問「老'nextPageToken更新之前 - 對不起,如果聲音厚(嗯,我:))。我可以在displayInbox()中的console.log中獲得'舊'和'新'令牌,但我無法讓它們(或任何已保存的數據)發回列表,即'舊/最後'令牌新令牌總是覆蓋它的任何線索請? –

+0

@RussellParrott恐怕你不能在API中向後分頁。當您向前翻頁時,您可以在API中存儲每個頁面,並且在不調用API的情況下向後翻頁時再次插入舊頁面。 – Tholle

+0

Tholle - 我得到了你不能在API中向後分頁 - 奇怪的是,它被稱爲「分頁」,假設這是MrG。 OK花時間試圖找到合適的地方來抓取變量來「存儲」但無濟於事,能否請你在你的示例中添加2行//作爲保存/調用它們的最佳位置 - 我使用firebase,以便更新快速簡單。非常感謝 - –