Вставка сна в определенную функцию в скрипте Google Sheets - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь извлечь данные из API от стороннего производителя и вставить в Google Sheets.Однако эта третья сторона разрешает только 3 запроса в минуту, поэтому я пытаюсь использовать функцию Utilities.sleep внутри функции, которую я создаю для этого запроса.

Мой лист выглядит следующим образом:

Имеет два входа, необходимые для функции, которую я использую (это ниже):

function GET_DETAILS_RECEITA(CNPJ,sleep_seconds) {
  Utilities.sleep(sleep_seconds*1000);

  var fields = 'nome,fantasia,email,telefone';
  var baseUrl = 'https://www.receitaws.com.br/v1/cnpj/';
  var queryUrl = baseUrl + CNPJ;

  if (CNPJ == '') {
    return 'Give me CNPJ...';
  }

  var response = UrlFetchApp.fetch(queryUrl);
  var json = response.getContentText();
  var place = JSON.parse(json);

  return [[ place.nome,
            place.fantasia,
            place.telefone,
            place.email,
          ]];
}

Технически это должно работать, но дляпо какой-то причине я получаю возврат только в первом случае.

enter image description here

Ошибка, которую я получаю, очень общая "Erro: Erro interno aoexecutar a função personalizada. "(что-то типа «Ошибка: внутренняя ошибка при выполнении персонализированной функции»).

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я бы хотел использовать что-то подобное в диалоге.Вы можете передать дополнительный параметр в заданном интервале, если вы используете Chrome.

<script>
var CNPJ='what ever';
window.onload=function(){setInterval(getDetails,25000,CNPJ);}
function getDetails(CNPJ){
  google.script.run.GET_DETAILS_RECEITA(CNPJ)
}
</script>

И если вы хотите обратный вызов, используйте withSuccessHandler ();

0 голосов
/ 04 декабря 2018

С https://developers.google.com/apps-script/guides/sheets/functions

Вызов пользовательской функции должен вернуться в течение 30 секунд.Если этого не произойдет, в ячейке отобразится ошибка: Внутренняя ошибка при выполнении пользовательской функции.

Учитывая вышеизложенное, не рекомендуется использовать sleep в пользовательской функции, которая будет использоватьсякак предусмотрено ОП.Вместо этого используйте пользовательское меню или редактор сценариев для выполнения сценария.

Чтобы минимизировать изменения в вашей функции, вы можете использовать функцию, которая считывает / записывает значения в электронную таблицу и передает необходимые аргументы GET_DETAILS_RECEITA

...