【问题标题】:Calling routine is not waiting for Google Picker呼叫例程不等待 Google Picker
【发布时间】:2020-05-01 21:42:01
【问题描述】:

我正在尝试使用 Google Picker 来选择一个文件夹并返回 folderId。我能够获取文件夹 ID,甚至将其粘贴到电子表格单元格中(我不想这样做;我只想在调用代码中使用该值)。但是我的调用代码会提前压缩并且不等待选择器的结果。即使在我选择文件夹之前,我也可以看到工作表上的值正在更新。我在这篇文章中使用了代码并稍作修改。 Google Picker - Return the File ID to my Google Script

我添加了 '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;
}

【问题讨论】:

标签: javascript asynchronous google-apps-script google-apps google-picker


【解决方案1】:

您需要使用setCallback(function(object)) 方法为您的Picker 对象分配一个回调函数,然后在Google Picker 上执行某个操作(例如选择文件夹)后,使用该回调函数执行您想要的操作。例如,从documentation 你可以像这样创建 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 Picker 上执行操作后要运行的回调函数的名称,例如可以这样定义:

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 部分。如果你想从 Apps Script 运行一些函数,你可以使用上面的回调函数来调用一个 Apps Script 函数,使用 google.script.run,下面的行会从 Apps Script 端调用 yourAppsScriptFunction 函数:

  google.script.run.yourAppsScriptFunction();

您可以查看client-server communication guide以获取更多说明。

【讨论】:

  • 安德烈斯 - 我最近被猛烈抨击并且无法回到这个问题上。希望尽快检查出来。布赖恩
猜你喜欢
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2020-11-21
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多