【问题标题】:GMail API pagination use of nextPageTokenGMail API 分页使用 nextPageToken
【发布时间】:2017-06-05 07:12:37
【问题描述】:

花费数小时搜索 Google 等。人。答案,当然很简单,但是如何使用 nextPageToken 使用 GMail api 创建分页?我所做的一切都无法让分页工作(就是来回)。

假设“授权用户”并使用我调用的正确范围进行访问

 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()。

提前致谢

【问题讨论】:

    标签: jquery pagination google-api gmail gmail-api


    【解决方案1】:

    您可以在每个请求中保存下一页令牌并在下一个请求中使用它。如果响应中没有下一页令牌,则表明您已收到所有消息:

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

    【讨论】:

    • Tholle - 让 TY 分页“向前” - NP 但不确定在哪里 - 在更新之前访问“旧” nextPageToken - 抱歉,如果听起来很厚重(我是 :) )。我可以在 displayInbox() 内的 console.log 中获取“旧和新”令牌,但我无法让它们(或任何保存的数据)发回列表,即“旧/最后一个”令牌新令牌总是覆盖它任何线索请问?
    • @RussellParrott 恐怕您不能在 API 中向后分页。您可以在向前翻页时存储 API 中的每个页面,并在向后翻页时再次插入旧页面而不调用 API。
    • Tholle - 我之前得到了你不能在 API 中向后分页 - 奇怪,因为它被称为“分页”假设那是 MrG。好的,花时间尝试找到正确的位置来获取变量以“存储”但无济于事,您能否在示例中添加 2 //行作为保存/调用它们的最佳位置 - 我使用 firebase 所以更新是快速简单。非常感谢——
    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 2017-11-29
    • 2017-10-31
    • 2020-06-19
    • 2015-07-27
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多