You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tampermonkey中函数无法获取XMLHttpRequest返回值,日志输出undefined

解决XMLHttpRequest异步结果获取问题

核心问题

你遇到的是异步操作的时序问题:XMLHttpRequest是异步执行的,weatherPull函数会在请求发送后立刻返回,此时请求还没完成,自然拿不到结果,所以kaminoan里打印的是undefined。

解决方案:用Promise包裹XHR请求

把weatherPull改造成返回Promise的函数,这样就能通过async/await或者.then()来等待请求完成:

function weatherPull() {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', '你的请求URL', true); // 替换成实际请求地址
    xhr.onload = function() {
      if (xhr.status >= 200 && xhr.status < 300) {
        // 这里替换成你实际提取degreesInner的逻辑
        const degreesInner = 从响应中解析数据(xhr.responseText);
        resolve(degreesInner); // 请求成功时返回结果
      } else {
        reject(new Error(`请求失败,状态码:${xhr.status}`));
      }
    };
    xhr.onerror = function() {
      reject(new Error('网络请求出错'));
    };
    xhr.send();
  });
}

用async/await获取结果

在kaminoan函数里,通过async/await等待weatherPull的Promise完成:

async function kaminoan() {
  try {
    const result = await weatherPull();
    console.log(result); // 这里就能拿到正确的degreesInner了
  } catch (error) {
    console.error('获取天气数据失败:', error);
  }
}

// 调用函数
kaminoan();

替代方案:用.then()链式调用

如果不想用async/await,也可以用Promise的.then()方法处理结果:

function kaminoan() {
  weatherPull()
    .then(result => {
      console.log(result);
    })
    .catch(error => {
      console.error('获取天气数据失败:', error);
    });
}

kaminoan();

关键说明

  • Promise的作用是把异步操作的结果"包装"成可等待的对象,resolve传递成功结果,reject传递错误信息。
  • async/await是Promise的语法糖,让异步代码写法更接近同步逻辑,可读性更强。
  • 必须处理错误(try/catch或者.catch()),避免请求失败时无反馈。

内容的提问来源于stack exchange,提问作者user19102374

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:42:06