【问题标题】:UrlFetchApp exception in Google Data Studio connectorGoogle Data Studio 连接器中的 UrlFetchApp 异常
【发布时间】:2020-02-20 13:33:43
【问题描述】:

我正在开发一个连接器,为了获取数据需要对 API 进行两次单独的调用。我注意到有时我会收到以下错误:

    { [Exception: Address unavailable: https://myapi.call] name: 'Exception' }

这个响应与调用的 API 无关,因为我得到了一个有效的200 响应,所以错误必须来自我用来获取数据的UrlFetchApp。此外,它只发生在需要多次同时调用 API 的更复杂的报告中。所以我想也许我达到了一些配额并决定使用Utilities.sleep()。然而,它似乎只能在相同的执行上下文中工作。因此,例如,如果我有一份报告,则只有一个 getData() 执行,因此 myUtilities.sleep() 可以正常工作:

如您所见,我指定了 1 秒的间隔。但是,当我在 Data Studio 仪表板中有多个报告时,对于相同的代码,结果如下:

如您所见,似乎有 12 个执行上下文同时触发。所以我Utilities.sleep() 功能无法阻止它。这是非常有问题的,因为首先我迟早会超过我调用的 API 的限制,其次我似乎已经超过了UrlFetchApp 的限制。 有没有人想出解决这个问题的方法?提前致谢。

【问题讨论】:

  • 您是在同一个脚本项目中提出请求吗?您能否分享脚本以更好地帮助您?错误显示在哪一行?是在使用fetch方法的那一行吗?
  • 1.是的。这是一个 Google Data Studio 连接器,它使用一个数据源对该源进行多次调用。 2. 目前不使用我不想透露的 Oauth 凭据。我必须准备另一个演示版本的脚本,但这可能需要一些时间。 3. 在我的try catch 声明中。如果我删除它,错误将显示在调用 UrlFetchApp 的行上。

标签: javascript google-apps-script google-data-studio


【解决方案1】:

Data Studio 将对使用您的连接器的页面上的每个元素进行单独的 getData 调用。为避免达到速率限制或配额,请使用Lock Service,如果可能,请使用Apps Script cache

请参阅Chrome UX Connector's code 了解两者的示例。

【讨论】:

  • 感谢这个 Chrome UX 连接器是非常有价值的例子。有一件事让我很困惑。它利用getScriptCache() 进行缓存。这是否意味着这个缓存是在脚本范围内共享的?因为我的连接器会获取用户的私人数据,所以我不喜欢泰国人。
  • 您可以将其范围限定为用户级别。在这里查看参考文档:developers.google.com/apps-script/reference/cache/cache-service
猜你喜欢
  • 2011-11-26
  • 2018-05-03
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
相关资源
最近更新 更多