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

如何用Promise的.then同时处理用户查询的成功与失败状态?

如何用单个.then同时处理Promise的已兑现和已拒绝状态?

当然可以!其实Promise的.then()方法本身就支持传入两个参数——第一个是处理**已兑现(resolved)状态的回调函数,第二个就是专门处理已拒绝(rejected)**状态的回调,刚好能帮你把原本分开的.then和.catch逻辑合并到同一个.then调用里。

先看看你原来的代码:

getUserData(UserId)
  .then((data) => {
    if (data.Item.UserId == UserId ) {
      console.log("Welcome Back");
      var checkFirst = "returning";
    }
  })
  .catch((err) => {
    console.log(err);
    console.log("It's a stranger");
    var checkFirst = "firstSession";
  });

用.then的双参数写法修改后是这样的:

getUserData(UserId)
  .then(
    // 第一个回调:处理Promise成功兑现的情况
    (data) => {
      if (data.Item.UserId == UserId ) {
        console.log("Welcome Back");
        var checkFirst = "returning";
      }
    },
    // 第二个回调:处理Promise被拒绝的情况
    (err) => {
      console.log(err);
      console.log("It's a stranger");
      var checkFirst = "firstSession";
    }
  );

几个需要注意的细节:

  • 这个第二个回调只会捕获原Promise本身的reject,不会捕获第一个回调函数内部抛出的错误(如果你的成功回调里有代码可能出错的话)。而原来的.catch会捕获整个Promise链上的所有错误,包括成功回调里的异常。如果你的成功回调逻辑很安全不会抛错,那这种合并写法完全没问题;如果有抛错风险,建议额外加一个.catch来兜底。
  • 另外你代码里的var checkFirst是在回调内部声明的,外部作用域访问不到这个变量哦。如果需要在回调外使用这个值,记得提前在外部声明变量,或者用其他方式传递结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:01:45