使用Contacts API超过Google App Script的最长执行时间

时间:2014-06-10 12:50:08

标签: google-apps-script google-apps

我正在创建一个脚本,负责生成一个报告,其中包含有关谷歌应用脚​​本中的一组论坛及其联系人的信息。

如果我选择了几个组,一切都会好的但如果我选择了几个(20个或更多),那么脚本会启动"超过最长执行时间"错误。

如何减少脚本时间执行?

谢谢!

我的(简化)脚本

var allContactsInfo = []

/II. For each group
for(var i = 0 ; i < numberOfGroups ; i++)
{
    var selected = eventInfo.parameter["group"+i]

    var contactInfo = []

    //III. If it has been selected by the user
    if(selected)
    {
        //IV. Get the contact group and contacts
        var contactGroup = ContactsApp.getContactGroupById(eventInfo.parameter["group_"+i+"_id"])

        var contacts = contactGroup.getContacts()

        //IV. Iterate over each group contact
        for (var j=0; j < contacts.length; j++) 
        {
            var contact = contacts[j];
            contactInfo.push(contact.getGivenName())               
            contactInfo.push(contact.getFamilyName())

            var groups = contact.getContactGroups()
            var groupsAsArray = []

            for (var k = 0 ; k < groups.length; k++) 
            {
                groupsAsArray.push(groups[k].getName())
            }

            contactInfo.push(groupsAsArray.sort().join())

            //V. Add the contact into the array
            allContactsInfo.push(contactInfo)
        } 
    }

    ...
    ...

   //VI. Fill the spreadsheet with the array built within the loop

   sheet.getRange(1, 1, allContactsInfo.length, headers.length).setValues(allContactsInfo);

更新

经过一些测试后,我发现产生的瓶颈是返回用户的组(通过contact.getContactGroups())。

返回姓名,姓氏,电子邮件,地址和电话都可以,但如果我也包含用户组,则会出现超时异常......

更新2

这是我的工作解决方案,希望它有所帮助:)

https://github.com/antacerod/google-app-script-6-minutes-limitation

1 个答案:

答案 0 :(得分:2)

最后我找到了另一个SO帖子。

它显示了与checkbox setValue方法实现及其第二个参数相关的一个很好的解决方法(设置是否应检查CheckBox,如果值因此调用而发生更改,则可选择触发事件)

就我而言,它就像一个魅力!

Access the workaround