如何在GAS中将函数输出用作变量而不是每次都运行该函数?

时间:2017-03-27 14:55:36

标签: javascript logging google-apps-script

我是Javascript / Coding的新手,我正试图解决问题。

我有一个程序可以将所有联系人电子邮件拉到一个数组中,然后对它们进行排序并添加新的电子邮件。拉动所有联系人需要太长时间(2000个联系人!)我想让Google Apps脚本每隔5分钟自动运行此部分,如果我想运行排序功能,我会有更新的列表。

是否可以让联系人将我的功能部分拉为自己的功能,然后使用logger.log保存值以供日后使用?单独的函数如何从这个新函数访问记录的信息?

function getEmailAddressList(){

var addrA = [];


 var contact = ContactsApp.getContacts();      

 //////////

  for(var i = 0; i < contact.length; i++){     

    var addresses = contact[i].getEmails();     

   for(var j = 0;j < addresses.length; j++){                            

      var address = addresses[j].getAddress();            

     addrA.push(address); 

     logger.log(addrA);      
    }; 


};

1 个答案:

答案 0 :(得分:0)

根据数据的大小,您可以将数据存储在&#34;属性服务&#34;或者&#34;缓存。&#34;属性服务每个属性名称可以容纳9k数据,总共500k。如果数据将大于该数据,那么您将需要不同的数据存储选项。例如,您可以将联系信息存储在Google云端硬盘中的文本文件中。显然,您也可以将数据保存到数据库中。关键是,您需要在某处存储联系信息。您无法将其存储在全局变量中,因为一旦代码停止运行,全局变量将丢失它的数据。 Logger.log()在这种情况下无法帮助您。

您可以使用基于时间的触发器在一段时间间隔内运行代码。你需要在&#34; Edit&#34;中设置它。菜单和&#34;当前项目的触发器。&#34;

以下是如何将数据存储在文本文件中的示例:

function getEmailAddressList(){

  var addrA,addresses,addressFile,allContacts,
      contactsAsJSON,i,j,thisAddress,thisContact;

  allContacts = ContactsApp.getContacts();      

 //////////
  addrA = [];

  for (i = 0; i < allContacts.length; i++) {     

    addresses = allContacts[i].getEmails();     

    for (j = 0;j < addresses.length; j++) {                            

      thisAddress = addresses[j].getAddress();            
      thisContact = addresses[j].getDisplayName();

      addrA.push(thisAddress);

     Logger.log(thisContact);      
    }
  }

  contactsAsJSON = JSON.stringify(addrA);

  try{
    addressFile = DriveApp.getFileById('id');
  }catch(e){}

  if (!addressFile) {
    addressFile = DriveApp.createFile('My Contacts', contactsAsJSON);
    Logger.log('New file ID: ' + addressFile.getId());//Get the new file ID and hard code into 
    //the code above
  }

  addressFile.setContent(contactsAsJSON);
};

以下示例说明如何将所有联系人存储在缓存服务中,每个联系人都是一个属性名称:

function getEmailAddressList(){

  var addresses,allContacts,Cache,i,j,thisAddress,thisContact;

  Cache = CacheService.getDocumentCache();

  allContacts = ContactsApp.getContacts();      

 //////////

  for (i = 0; i < allContacts.length; i++) {     

    addresses = contact[i].getEmails();     

    for (j = 0;j < addresses.length; j++) {                            

      thisAddress = addresses[j].getAddress();            
      thisContact = addresses[j].getDisplayName();

      Cache.put(thisContact, thisAddress) 

     logger.log(thisContact);      
    }
  }
};