javascript – 获取Gmail主题主题(以理智的方式)
作者:互联网
我正在尝试使用Gmail API检索Gmail帐户中的所有主题主题.
使用threads.list很容易,但主要是获取线程的ID,而不是主题.
我找到的唯一方法是使用threads.list然后,为每个线程调用threads.get并从有效负载元数据中的头中获取主题.
显然,这会产生很多API调用,即如果有100个线程则调用101次.
有没有更好的办法?
这是我目前使用的代码:
var getIndivThread = function(threads) {
threads.threads.forEach(function(e) {
indivThreadRequst.id = e.id,
gmail.api.users.threads.get(indivThreadRequst).execute(showThread);
});
};
var indivThreadRequst= {
format: 'metadata',
metadataHeaders:['subject'],
userId: myUserId,
maxResults:1};
var showThread = function(thread) {
console.log(thread.messages[0].payload.headers[0].value);
};
gmail.api.users.threads.list({userId:myUserId}).execute(getIndivThread);
解决方法:
不幸的是,没有办法通过当前的API一次获得多个线程主题.但是,您可以采取一些措施来提高性能:
>使用API的分页功能一次获取有限数量的线程.
>并行获取批量消息,而不是尝试一次获取所有消息或一次获取一个消息.为自己做实验,但5开头就是一个很好的数字.
>如果这是一个浏览器实现,请考虑拨打后端而不是从浏览器拨打电话.这样,客户端每页只进行1次调用,它允许您为服务器添加缓存和预加载机制,从而改善客户体验.这里潜在的缺点是可扩展性;随着您获得更多客户端,您将需要比胖客户端方法更多的处理能力.
作为#2的示例,您最初可以获取5,然后让每个函数的回调触发下一个调用,因此总是有5个并发获取:
var CONCURRENCY_LIMIT = 5;
function getThread(threadId, done) {
threadRequest.id = e.id;
gmail.api.users.threads.get(threadRequest).execute(function(thread) {
showThread();
done();
});
}
gmail.api.users.threads.list({userId:myUserId}).execute(function(threads) {
function fetchNextThread() {
var nextThread = threads.shift();
nextThread.id && getThread(nextThread.id, fetchNextThread);
}
for (var i = 0; i < CONCURRENCY_LIMIT; i++) {
fetchNextThread();
}
});
标签:javascript,gmail-api 来源: https://codeday.me/bug/20190628/1315579.html