编程语言
首页 > 编程语言> > javascript – 获取Gmail主题主题(以理智的方式)

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