Процедура вызова не ждет Google Picker - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь использовать Google Picker, чтобы выбрать папку и вернуть идентификатор папки. Я могу получить идентификатор папки и даже вставить ее в ячейку электронной таблицы (что я не хочу делать; я просто хочу использовать значение в своем коде вызова). Но мой код вызова ускоряется и не ждет результата выбора. Я вижу, что значения на моем листе обновляются, даже до того, как я выбрал папку. Я использовал код в этом посте и немного изменил его. Google Picker - вернуть идентификатор файла в мой скрипт Google.

Я добавил 'PropertiesService.getScriptProperties (). SetProperty (' mykey ', fileId);' сохранить fileId и 'var myvalue = PropertiesService.getScriptProperties (). getProperty (' mykey ');' в процедуре вызова, чтобы получить его. Это работает, но время выключено.

Что может заставить мой код сидеть и ждать вывода средства выбора?

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

function allIn() {
  showPicker() ;
  console.log("Ready to get myKey");           

  var myvalue = PropertiesService.getScriptProperties().getProperty('mykey');    
  console.log("Ready to console log myKey"); //doesn't show this;
  console.log("MyValue returned = " + myvalue); //doesn't show this;
  SpreadsheetApp.getActiveSheet().getRange('a4').setValue(myvalue); //runs this before picker completes;
}

1 Ответ

0 голосов
/ 04 мая 2020

Вам необходимо назначить функцию обратного вызова для объекта Picker с помощью метода setCallback(function(object)), а затем использовать функцию обратного вызова для выполнения необходимых действий после выполнения действия в Google Picker, например выбора папки , Например, из документации вы можете создать средство выбора следующим образом:

function createPicker() {
    if (pickerApiLoaded && oauthToken) {
      var picker = new google.picker.PickerBuilder().
          addView(google.picker.ViewId.DOCS).
          setOAuthToken(oauthToken).
          setDeveloperKey(developerKey).
          setCallback(pickerCallback).
          build();
      picker.setVisible(true);
    }
  }
}

pickerCallback будет названием функции обратного вызова, которая будет запущена после выполнения действия в Google Выбор, и это может быть определено, например, следующим образом:

function pickerCallback(data) {
    var url = 'nothing';
    if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
      var doc = data[google.picker.Response.DOCUMENTS][0];
      url = doc[google.picker.Document.URL];
    }
    var message = 'You picked: ' + url;
    document.getElementById('result').innerHTML = message;
}

Весь приведенный выше код будет помещен в html / JS часть кода. Если вы хотите запустить какую-либо функцию из скрипта приложения, вы можете использовать вышеупомянутую функцию обратного вызова для вызова функции скрипта приложения, используя google.script.run , строка ниже будет вызывать функцию yourAppsScriptFunction со стороны Apps Script:

  google.script.run.yourAppsScriptFunction();

Вы можете обратиться к руководству по связи клиент-сервер для получения более подробных объяснений.

...