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

如何为Promise构建年龄校验的多条件判断链?

实现符合多条件校验的checkAge函数(Promise版本)

原代码存在的问题

  1. 类型判断错误:typeof age === undefined 写法错误,typeof 操作符返回的是字符串类型,判断未传入参数应该用 age === undefined。
  2. 校验逻辑缺失:未实现“非数值”“负数”的校验分支,完全不符合需求。
  3. Promise用法错误:
    • 直接在 resolve/reject 中执行 console.log,应该传递信息到后续的 then/catch 处理。
    • 最终的验证完成提示放在Promise内部同步执行,无法保证在校验结果输出后执行。

正确实现方案

我们需要按优先级依次完成三个校验条件,利用Promise的reject抛出对应错误,resolve返回成功信息,最后通过finally统一输出验证完成提示(无论成功失败都会执行)。

完整代码实现

function checkAge(age) {
  return new Promise((resolve, reject) => {
    // 1. 校验是否未传入age参数
    if (age === undefined) {
      reject("Please, enter your age");
      return;
    }
    // 2. 校验是否为有效数值(排除非数字类型和NaN)
    if (typeof age !== 'number' || isNaN(age)) {
      reject("Please, enter number");
      return;
    }
    // 3. 校验是否为负数
    if (age < 0) {
      reject("Please, enter positive number");
      return;
    }
    // 所有校验通过
    resolve("Access allowed");
  });
}

调用方式(then/catch版)

// 测试未传入参数
checkAge()
  .then(msg => console.log(msg))
  .catch(err => console.log(err))
  .finally(() => console.log("Age verification complete"));

// 测试传入负数
checkAge(-22)
  .then(msg => console.log(msg))
  .catch(err => console.log(err))
  .finally(() => console.log("Age verification complete"));

// 测试传入非数值
checkAge("abc")
  .then(msg => console.log(msg))
  .catch(err => console.log(err))
  .finally(() => console.log("Age verification complete"));

// 测试合法年龄
checkAge(22)
  .then(msg => console.log(msg))
  .catch(err => console.log(err))
  .finally(() => console.log("Age verification complete"));

调用方式(async/await版,更易读)

async function verifyAge(age) {
  try {
    const result = await checkAge(age);
    console.log(result);
  } catch (err) {
    console.log(err);
  } finally {
    console.log("Age verification complete");
  }
}

// 执行测试
verifyAge();
verifyAge(-22);
verifyAge("abc");
verifyAge(22);

关键逻辑说明

  • 校验顺序:严格按照需求优先级判断,先检查是否未传参,再检查是否为有效数值,最后检查是否为负数,避免逻辑覆盖。
  • Promise的reject:每个错误条件触发时,通过reject抛出对应错误信息,并用return终止后续校验。
  • finally方法:Promise的finally回调无论成功或失败都会执行,完美满足“无论校验结果如何最终输出验证完成”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:45:41