Javascript 获取Gmail线程主题(以理智的方式)

Javascript 获取Gmail线程主题(以理智的方式),javascript,gmail-api,Javascript,Gmail Api,我正在尝试使用Gmail API检索Gmail帐户中的所有线程主题 这对于线程来说很容易。list,但它主要获取线程的ID,而不是主题 我找到的唯一方法是使用threads.list,然后为每个线程调用threads.get,并从负载元数据的头中获取主题 显然,这会产生大量API调用,即如果有100个线程,则会产生101个调用 有更好的办法吗 以下是我当前使用的代码: var getIndivThread=函数(线程){ threads.threads.forEach(函数(e){ indivT

我正在尝试使用Gmail API检索Gmail帐户中的所有线程主题

这对于
线程来说很容易。list
,但它主要获取线程的ID,而不是主题

我找到的唯一方法是使用
threads.list
,然后为每个线程调用
threads.get
,并从负载元数据的头中获取主题

显然,这会产生大量API调用,即如果有100个线程,则会产生101个调用

有更好的办法吗

以下是我当前使用的代码:

var getIndivThread=函数(线程){
threads.threads.forEach(函数(e){
indivThreadRequst.id=e.id,
gmail.api.users.threads.get(indivThreadRequst).execute(showThread);
});
};
变量indivThreadRequst={
格式:“元数据”,
metadataHeaders:['subject'],
userId:myUserId,
maxResults:1};
var showThread=函数(线程){
console.log(thread.messages[0].payload.headers[0].value);
};
gmail.api.users.threads.list({userId:myUserId}).execute(getIndivThread);

不幸的是,无法通过当前API一次获取多个线程主题。但是,您可以做一些事情来提高性能:

  • 使用API的分页功能一次获取有限数量的线程

  • 并行获取多批消息,而不是试图一次获取所有消息或一次获取一个消息。自己尝试一下,但是5是一个好的开始

  • >P>如果这是浏览器实现,考虑对后端进行调用,而不是从浏览器发出调用。这样,客户机每页只进行一次调用,它允许您向服务器添加缓存和预加载机制,从而改善客户体验。这里潜在的缺点是可伸缩性;当您获得更多的客户机时,您将需要比胖客户机方法多得多的处理能力

    作为#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();
      }
    });
    
    var并发限制=5;
    函数getThread(threadId,done){
    threadRequest.id=e.id;
    gmail.api.users.threads.get(threadRequest).execute(函数(线程){
    showThread();
    完成();
    });
    }
    gmail.api.users.threads.list({userId:myUserId}).execute(函数(线程){
    函数fetchnexthread(){
    var nextThread=threads.shift();
    nexthread.id&&gethread(nexthread.id,fetchnexthread);
    }
    for(var i=0;i
    谢谢。你能用代码详细说明第二点吗?异步获取线程ID的消息,而不是顺序获取它们,从而提高性能,这就是我想你的意思。你是在浏览器中还是在节点中?伙计,这太糟糕了。为了列出gmail中的一些线程,你必须经历所有这些吗?重要的是,只需要得到信息。