【问题标题】:Does Google Appscript / UrlFetchApp.fetchAll() function run synchronously?Google Apps Script / UrlFetchApp.fetchAll() 函数是否同步运行?
【发布时间】:2020-03-08 17:13:10
【问题描述】:

我遇到的问题是我有许多 API 请求我想要发出,所有这些请求都需要几秒钟才能返回,因为要返回的数据的大小,而 UrlFetchApp.fetchAll(..) 只是返回一个数组空 JS 对象,例如:[{}, {}, {}, ...].

我的 requests 数组看起来像这样(为清晰起见格式化):

requests = [
  {
    validateHttpsCertificates: false,
    url: 'https://url.com/api/v2/api_key/endpoint/action?params1=false&params2=true'
  },
  {
    validateHttpsCertificates: false,
    url: 'https://url.com/api/v2/api_key/endpoint/action?params3=false&params4=true'
  }
];

提出我的请求的代码:

responses = UrlFetchApp.fetchAll(requests);

// returns back '[{}, {}]'
console.log(JSON.stringify(responses));

我可以通过数据库确认 API 调用正在运行,因为 AWS RDS 性能指标显示数据库查询正在运行,而且我还可以确认 API 本身通过 NewRelic 以 200 响应,这就是为什么我的直觉是我没有正确使用 GAS/UrlFetchApp.fetchAll()。

所以,我想知道:

  1. GAS 是否同步运行,也就是说,它会等待.fetchAll() 返回,然后再运行console.log(...) 行?
  2. 我真的正确调用fetchAll 吗?目前处于亏损状态,Google Appscript 文档充其量只是微薄的。

提前感谢您的帮助。

编辑:

我迁移到fetchAll之后我成功使用fetch,例如:

// synchronously fetching one by one
requests.map(request => UrlFetchAll.fetch(request.url, { validateHttpsCertificates: false });

【问题讨论】:

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


    【解决方案1】:

    这个答案怎么样?

    问题 1 的答案:

    fetchAll 方法适用于异步处理。 Ref如果要使用UrlFetchApp进行同步处理,请循环使用UrlFetchApp.fetch()。

    问题 2 的答案:

    我认为您对 fetchAll 方法的请求是正确的。为了获取UrlFetchApp.fetchAll(requests)的回复,下面的修改如何?

    修改脚本:

    var responses = UrlFetchApp.fetchAll(requests);
    var res = responses.map(function(e) {return e.getContentText()});
    console.log(JSON.stringify(res)); //  or Logger.log(JSON.stringify(res));
    
    • 在此修改中,getContentText() 用于每个响应。
    • 响应顺序与请求顺序一致。

    参考资料:

    如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    【讨论】:

    • 你好,谢谢你,我会试一试并报告!
    • @Stu 我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,我深表歉意。到时候,可以问一下你现在的情况吗?我想学习解决你的问题。
    • 嘿,对不起,我没有早点回来,但是是的!这帮了大忙。非常感谢您的帮助!
    • @Stu 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2015-11-16
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多