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

为何变量‘status’始终保持为‘pending’?技术咨询

问题原因与解决办法

核心原因

你看到status一直是pending,本质是Promise回调的异步执行特性导致的:

  • api()返回的是Promise对象,.then()里的成功/失败回调不会同步执行,必须等API请求完成(成功或失败)后才会触发。
  • 如果你在定义suspender后立刻同步读取status(比如直接打印),此时异步回调还没执行,status还是你初始化时的pending值。

解决方法

方法1:把依赖status的逻辑放到回调内部

将需要使用status或result的代码,直接写在.then()/.catch()的回调函数里,确保逻辑在异步操作完成后执行:

let status = 'pending';
let result = null;

api({
  url: 'https://data.etabus.gov.hk/v1/transport/kmb/route-stop/7/inbound/1',
  method: 'get',
}).then(
  (r) => {
    console.log("r", r);
    status = 'success';
    result = r.data;
    // 在这里处理成功后的业务逻辑
    console.log(status); // 此时输出success
  },
  (e) => {
    status = 'error';
    result = e;
    // 在这里处理错误逻辑
    console.log(status); // 此时输出error
  }
);

方法2:用async/await简化异步逻辑

通过async函数包裹代码,用await等待Promise完成,让异步代码看起来像同步代码,更直观:

async function fetchBusData() {
  let status = 'pending';
  let result = null;
  try {
    const r = await api({
      url: 'https://data.etabus.gov.hk/v1/transport/kmb/route-stop/7/inbound/1',
      method: 'get',
    });
    status = 'success';
    result = r.data;
    console.log(status); // 输出success
  } catch (e) {
    status = 'error';
    result = e;
    console.log(status); // 输出error
  }
}

fetchBusData();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:12:08