使用UrlFetchApp调用API至谷歌表格时遇TypeError问题求助
解决UrlFetchApp.fetch().then is not a function错误
错误原因
Google Apps Script(GAS)中的UrlFetchApp.fetch()是同步执行的方法,它直接返回HTTPResponse对象,并非JavaScript Promise。所以你不能用Promise的.then()、.catch()链式调用,这就是触发TypeError的核心原因。
修正方案
改用同步代码的写法,用try-catch处理错误,直接调用GAS提供的响应对象方法获取内容:
function myFunction() { var myHeaders = { "Accept": "application/JSON, text/javascript, */*;q=0.01" }; var requestOptions = { method: 'GET', headers: myHeaders, followRedirects: true // 注意GAS中重定向参数为followRedirects,值为布尔型 }; try { // 同步获取响应 var response = UrlFetchApp.fetch("http://vixcentral.com/ajax_historical?n1=2023-10-17", requestOptions); // 获取响应文本内容 var result = response.getContentText(); // 输出日志(GAS中Logger.log或console.log均可,前者兼容旧编辑器) Logger.log(result); } catch (error) { // 捕获并输出错误 Logger.log('error: ' + error.toString()); } }
关键修改点
- 移除
.then()和.catch()链式调用,改用try-catch捕获同步代码的异常 - 用
response.getContentText()替代response.text():GAS的HTTPResponse对象提供的是getContentText()方法来获取响应文本 - 修正重定向参数:GAS中UrlFetch的重定向配置是
followRedirects(布尔值),而非你原代码中的redirect: 'follow',原参数会被忽略 - 日志输出:GAS中推荐用
Logger.log(),新版编辑器也支持console.log(),根据你的编辑器版本选择即可
如果需要将响应解析为JSON对象,可在获取result后添加:
var jsonData = JSON.parse(result); Logger.log(jsonData);
内容的提问来源于stack exchange,提问作者Joe Abraham
相关产品推荐
相关产品推荐

