GMail API 分页使用 nextPageToken
GMail API pagination use of nextPageToken
花了几个小时搜索 Google 等。阿尔。要获得答案,当然这很简单,但是如何使用 nextPageToken 使用 GMail api 创建分页?我所做的一切都无法使分页正常工作(就是来回)。
假设 'authorised user' 并使用我调用的正确范围进行访问
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 简单地在 table 中列出列表,例如
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 加上有似乎不是 create/obtain 一个 'previousPageToken'.
的方法
对不起,如果简单但它是我还是有比这更重要的? GMail API 文档在这个问题上(对我而言)显得很差,我还没有找到有帮助的 Whosebug 答案。
回顾一下 - 如何添加分页按钮并将适当的变量传递给 call/recall displayInbox()。
提前致谢
您可以在每次请求时保存下一页令牌,并在下一次请求中使用它。如果响应中没有下一页标记,您就知道您已收到所有消息:
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);
});
}
})
}
花了几个小时搜索 Google 等。阿尔。要获得答案,当然这很简单,但是如何使用 nextPageToken 使用 GMail api 创建分页?我所做的一切都无法使分页正常工作(就是来回)。
假设 'authorised user' 并使用我调用的正确范围进行访问
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 简单地在 table 中列出列表,例如
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 加上有似乎不是 create/obtain 一个 'previousPageToken'.
的方法对不起,如果简单但它是我还是有比这更重要的? GMail API 文档在这个问题上(对我而言)显得很差,我还没有找到有帮助的 Whosebug 答案。
回顾一下 - 如何添加分页按钮并将适当的变量传递给 call/recall displayInbox()。
提前致谢
您可以在每次请求时保存下一页令牌,并在下一次请求中使用它。如果响应中没有下一页标记,您就知道您已收到所有消息:
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);
});
}
})
}