为何Google Apps Script的UrlFetchApp.fetchAll()未返回文档所述的HTTPResponse[]?
问题解答
- 你看到的日志现象是Logger的自动序列化行为,并非
UrlFetchApp.fetchAll()返回了非HTTPResponse对象。
Google Apps Script的Logger.log()在输出对象时,会自动对HTTPResponse对象进行序列化展示——它会默认提取响应的内容(比如JSON数据)来输出,而不是显示对象的类结构或属性。这就导致你误以为返回的是原始JSON数据,实际上responses数组里的元素依然是标准的HTTPResponse对象。
- 验证方法:修改代码,添加类型检查或调用
HTTPResponse的专属方法来确认:
function test() { let oneRequest = { 'url': 'https://rest/of/url/redacted', 'method': 'get', 'contentType': 'application/json', 'headers': { 'x-okapi-tenant': 'string value redacted', 'x-okapi-token': 'string value redacted' }, 'muteHttpExceptions': true }; let requests = [oneRequest]; let responses = UrlFetchApp.fetchAll(requests); // 验证返回对象类型 Logger.log(typeof responses[0]); // 会输出 'object' // 调用HTTPResponse专属方法,比如获取响应状态码 Logger.log(responses[0].getResponseCode()); // 会返回HTTP状态码如200 // 手动获取内容,和日志里的内容对比 Logger.log(JSON.parse(responses[0].getContentText())); }
运行这段代码后,你会发现responses[0].getResponseCode()能正常执行,说明它确实是HTTPResponse对象——日志里的JSON内容只是Logger为了可读性自动展示的对象内容,而非返回值本身的类型改变。
内容的提问来源于stack exchange,提问作者mhucka
相关产品推荐
相关产品推荐

