如何编写最低工资员工涨薪函数?解决测试不通过问题
问题解决:修正最低工资员工涨薪函数的错误处理逻辑
问题根源
现有代码的核心问题有两个:
- 全局
catch会捕获Promise链中所有环节的错误(包括获取员工数据、查找最低薪员工、通知员工等),而非仅针对涨薪请求(setEmployeeSalary)的错误,导致非涨薪环节出错也会通知管理员,不符合测试要求。 - 函数返回值不符合规范:失败场景下返回的是
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(); }); }, };
关键修改说明
- 改用async/await语法:相比Promise链式调用,更直观地划分错误边界,便于精准控制错误处理逻辑。
- 精准捕获涨薪请求错误:将
setEmployeeSalary的调用包裹在单独的try/catch块中,只有该环节出错时才调用notifyAdmin,完全符合测试用例要求。 - 统一返回值规范:无论哪个环节出错,最终都返回
false;全流程成功则返回true,严格满足函数返回已决议Promise且值为布尔值的要求。 - 增加边界处理:添加了无员工数据的判断,避免后续代码因
minSalaryEmployee为null而报错。
内容的提问来源于stack exchange,提问作者retor
相关产品推荐
相关产品推荐

