编写指定规则Promise函数时出现UnhandledPromiseRejectionWarning报错如何解决
现有代码存在的问题
- 未按需求封装为函数,直接实例化了Promise对象,既无法接收传入的
data参数,也导致Promise在代码加载阶段就直接执行,触发data is not defined报错。 - 逻辑判断存在错误,第二个分支
else if(isNaN(data) && data%2!=0)的条件完全不成立:已经通过第一个if(isNaN(data))判断后,isNaN(data)必然为false,该分支永远不会执行。 - 拼写错误:非数字场景下reject的内容写错为
erroe,和需求要求的error不符。 - 仅用
isNaN判断是否为数字不够严谨,比如字符串'123'的isNaN返回结果为false,但本质不是数字类型。
修复后的代码
const job = (data) => { return new Promise((resolve, reject) => { // 校验是否为有效数字 if (typeof data !== 'number' || isNaN(data)) { reject('error') return } if (data % 2 !== 0) { // 奇数1秒后返回resolved状态 setTimeout(() => resolve('odd'), 1000) } else { // 偶数2秒后返回rejected状态 setTimeout(() => reject('even'), 2000) } }) } module.exports = job
调用测试示例
// 测试非数字参数 job('test').catch(err => console.log(err)) // 立即输出 error // 测试奇数参数 job(5).then(res => console.log(res)) // 1秒后输出 odd // 测试偶数参数 job(6).catch(err => console.log(err)) // 2秒后输出 even
内容的提问来源于stack exchange,提问作者Hiba Youssef
相关产品推荐
相关产品推荐

