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

如何编写最低工资员工涨薪函数?解决测试不通过问题

问题解决:修正最低工资员工涨薪函数的错误处理逻辑

问题根源

现有代码的核心问题有两个:

  1. 全局catch会捕获Promise链中所有环节的错误(包括获取员工数据、查找最低薪员工、通知员工等),而非仅针对涨薪请求(setEmployeeSalary)的错误,导致非涨薪环节出错也会通知管理员,不符合测试要求。
  2. 函数返回值不符合规范:失败场景下返回的是notifyAdmin的成功结果(true),无法正确返回false表示涨薪失败。

修改后的代码

async function increaseSalary() {
  try {
    // 1. 获取所有员工数据
    const employeeData = await api.getEmployees();
    
    // 2. 找到薪资最低的员工
    const [minSalaryEmployee] = employeeData.reduce(([minEmployee, minSalary], employee) => {
      const { salary } = employee;
      return salary < minSalary ? [employee, salary] : [minEmployee, minSalary];
    }, [null, Infinity]);
    
    if (!minSalaryEmployee) {
      // 无员工数据的情况,直接返回失败
      return false;
    }
    
    const { id, name, salary: oldSalary } = minSalaryEmployee;
    const newSalary = oldSalary * 1.2;
    
    // 3. 发起涨薪请求,单独捕获该环节的错误
    let updatedEmployee;
    try {
      updatedEmployee = await api.setEmployeeSalary(id, newSalary);
    } catch (e) {
      // 涨薪请求失败,通知管理员
      await api.notifyAdmin(e);
      return false;
    }
    
    // 4. 涨薪成功,通知员工
    await api.notifyEmployee(id, `Hello, ${name}! Congratulations, your new salary is ${updatedEmployee.salary}!`);
    return true;
  } catch (e) {
    // 其他环节(获取员工、通知员工等)出错,直接返回失败
    return false;
  }
}

// 原api对象保持不变
const api = {
  _employees: [
    { id: 1, name: 'Alex', salary: 120000 },
    { id: 2, name: 'Fred', salary: 110000 },
    { id: 3, name: 'Bob', salary: 80000 },
  ],

  getEmployees() {
    return new Promise((resolve) => {
      resolve(this._employees.slice());
    });
  },

  setEmployeeSalary(employeeId, newSalary) {
    return new Promise((resolve) => {
      this._employees = this._employees.map((employee) =>
        employee.id !== employeeId
          ? employee
          : {
            ...employee,
            salary: newSalary,
          }
      );
      resolve(this._employees.find(({ id }) => id === employeeId));
    });
  },

  notifyEmployee(employeeId, text) {
    return new Promise((resolve) => {
      resolve(true);
    });
  },

  notifyAdmin(error) {
    return new Promise((resolve) => {
      resolve(true);
    });
  },

  setEmployees(newEmployees) {
    return new Promise((resolve) => {
      this._employees = newEmployees;
      resolve();
    });
  },
};

关键修改说明

  1. 改用async/await语法:相比Promise链式调用,更直观地划分错误边界,便于精准控制错误处理逻辑。
  2. 精准捕获涨薪请求错误:将setEmployeeSalary的调用包裹在单独的try/catch块中,只有该环节出错时才调用notifyAdmin,完全符合测试用例要求。
  3. 统一返回值规范:无论哪个环节出错,最终都返回false;全流程成功则返回true,严格满足函数返回已决议Promise且值为布尔值的要求。
  4. 增加边界处理:添加了无员工数据的判断,避免后续代码因minSalaryEmployee为null而报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:01:04