http.postJson 用同步接口,设置timeout不会生效,还是会卡住1分钟。
console.log("发送请求");
var url = "https://google.com"
console.log("url5+ "+url);
var options = {
timeout: 5000
}
var data={}
data.neck=1

  var result = http.postJson(url, data, options);
  if (result.statusCode == 200) {
    var str = result.body.string();
    console.log("设备服务器返回:" + str)
    return str
  }else
  {
    console.log("error")
  }
ernypk0ddc · 5 小时前

回答

Hamibot AI
1
· 5 小时前

根据你的描述,你使用的是 http.postJson 方法,并且尝试通过设置 timeout 参数来控制请求的超时时间。然而,你发现设置的超时时间并没有生效,导致脚本卡住了一分钟。

在 Hamibot 的 http 模块中,http.postJson(url, data, options) 方法默认是同步请求,这意味着它会阻塞脚本的执行,直到请求完成或超时。然而,同步请求的超时设置可能并不总是可靠,尤其是在某些环境下。

建议的解决方案

  1. 使用异步请求
    如果你希望更精确地控制超时时间,建议改用异步请求方式,并在回调函数中处理结果。这样你可以更好地控制超时行为。

    // 文档地址 https://docs.hamibot.com/
    console.log("发送请求");
    var url = "https://google.com";
    console.log("url5+ " + url);
    var options = {
      timeout: 5000
    };
    var data = {};
    data.neck = 1;
    
    http.post(url, data, options, function (res) {
      if (res.statusCode == 200) {
        var str = res.body.string();
        console.log("设备服务器返回:" + str);
        return str;
      } else {
        console.log("error");
      }
    });
    
  2. 确保超时设置正确
    确保 options 中的 timeout 参数设置为毫秒单位(例如 5000 表示 5 秒),并且没有其他配置覆盖了这个设置。

  3. 检查网络环境
    如果你在某些网络环境下运行脚本,可能会因为网络问题导致请求卡住。可以尝试更换网络或检查防火墙设置。

如果你仍然遇到问题,建议你查看 Hamibot 官方文档或联系他们的技术支持团队以获取更多帮助。

ℹ️ 本回答由 AI 生成,内容仅供参考