【发布时间】:2019-01-26 02:58:44
【问题描述】:
我正在尝试使用 Urlfetchapp.fetch 函数将 json 有效负载发布到 url 并接收该请求的 json 响应。
示例代码:
var url = "https://example.com/RST/myapi";
var accessToken = getAccessToken();
var headers = {
"Authorization": "Bearer " + accessToken
};
var options = {
"headers": headers,
"method" : "POST",
"contentType" : "application/json",
"payload" : '{ "Name": "Mark" }',
"muteHttpExceptions": true
};
var response = UrlFetchApp.fetch(url, options);
但是,我的请求因超时错误而中断。有人告诉我,由于 API 资源繁重,请求可能需要 3 分钟才能返回响应,具体取决于服务器状态。
有没有办法改变这个超时限制?让它等待至少 3 分钟,直到收到任何回复?
编辑:我刚刚被告知 API 服务没有回调 url 参数,但是在重试时它可能会更快地响应。但我不知道该怎么做?它不是我可以捕捉和检查的响应错误。但是超时错误意味着在那之后什么都不会执行
感谢您的帮助。
【问题讨论】:
-
如果 API 支持回调 url 参数,例如一个将结果发回的 URL,您可以为您的脚本项目创建一个 webapp 并传递其 url。你需要拆分你的脚本来支持异步行为,但是对于 JavaScript 来说这有点正常 ;) 因为他们知道他们对某些请求的 API 很慢,所以他们可能支持这样的操作。
-
@tehhowch 感谢您的建议。我会调查一下。我以前从未做过 webapp,但应该很容易。如果我有问题,希望我能回到这里询问更多:)
-
我刚刚被告知 API 服务没有回调 url 参数,但是在重试时它可能会更快地响应。但我不知道该怎么做。它不是响应错误,而是超时错误,这意味着在那之后什么都不会执行。
-
可以将异常静音,查看请求的状态码。如果失败,您可以重新查询端点。或者,将您的
.fetch包装在 try-catch 块中。 -
尝试 catch 也不起作用,正如您在我的示例代码中看到的那样,我也将 muteHttpExceptions 设置为 true。我还在同一执行中删除了任何其他 API 调用。仍然得到同样的错误,Exception: Timeout: www.example.com。此外,它会在一分钟内给出超时异常,而脚本应该运行至少 6 分钟。
标签: javascript google-apps-script timeout urlfetch