Кто-нибудь знает ограничение количества запросов на размещение в электронной таблице Google? - PullRequest
0 голосов
/ 02 марта 2020

Я использовал следующий код, чтобы использовать лист Google в качестве конечной точки для веб-крючка. Проблема в том, что я не получаю все события от веб-крюка, по-видимому, одновременно происходит много событий, и электронная таблица не может их перехватить. Вот код, который я использовал:

function doPost(e){
    if (e==undefined){
        Logger.log("No data");
        return HtmlService.createHtmlOutput("Need data");
    }
    var mydata=JSON.parse(e.postData.contents);
    var i;
    for (i=0;i<mydata.length; i++){
        var email=mydata[i].email;
        var event=mydata[i].event;
        var marketing_campaign_name=mydata[i].marketing_campaign_name;
        var url=mydata[i].url;
        var timestamp=mydata[i].timestamp;
        var fecha=new Date(timestamp*1000);
        var ip=mydata[i].ip;
        var sheet=SpreadsheetApp.getActiveSheet();
        var lastRow=Math.max(sheet.getLastRow(),1);
        sheet.insertRowAfter(lastRow);
        sheet.getRange(lastRow + 1, 1).setValue(email);
        sheet.getRange(lastRow + 1, 2).setValue(event);
        sheet.getRange(lastRow + 1, 3).setValue(url);
        sheet.getRange(lastRow + 1, 4).setValue(marketing_campaign_name);
        sheet.getRange(lastRow + 1, 5).setValue(fecha);
        sheet.getRange(lastRow + 1, 6).setValue(ip);
    }
    SpreadsheetApp.flush();
    return HtmlService.createHtmlOutput("post request received");
}

1 Ответ

3 голосов
/ 03 марта 2020

Существует ограничение в 30 одновременных выполнений, которое указано на странице квот .

Однако это ограничение не может быть вашей проблемой, возможно, вы также имеете дело с состояние гонки проблема. В настоящее время, если вы получаете несколько запросов doPost, близких к одновременным, они будут одновременно читать и записывать в электронную таблицу. Это означает, что несколько запросов могут получить одно и то же значение lastRow, а затем записать все свои результаты в одну и ту же строку.

Лучшее решение в вашем случае - использовать appendRow () , что определенно позволяет избежать эта проблема.

Эта операция является атомарной; он предотвращает проблемы, когда пользователь запрашивает последнюю строку, а затем пишет в эту строку, и между получением последней строки и записью в нее возникает промежуточная мутация.

Чтобы использовать appendrow, соберите весь свой строка в массиве, затем добавьте этот массив к листу.

 var sheet=SpreadsheetApp.getActiveSheet();
 var row = [email,event,url,marketing_campaign_name,fecha,ip];
 sheet.appendRow(row);

Альтернативное решение было бы использовать Script Lock , который позволяет вам «заблокировать» часть кода так что это не может быть выполнено одновременно. Это имело бы больше смысла, если бы вы выполняли более сложные действия, чем запись на лист, и вам нужно было убедиться, что эти действия никогда не выполнялись одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...