如何优化Promise中if/else分支的resolve写法?解决message未定义问题
当然可以简化这段代码,不需要在每个if/else分支里单独调用resolve()。你遇到的message未定义错误,是因为每个分支里的const message属于块级作用域,出了对应的if/else块就无法被外部访问,所以移到分支外调用resolve时会找不到这个变量。
下面是几种简洁的优化方案:
方案1:提前声明变量,统一resolve
用let提前声明message,在分支内完成赋值后,最后统一调用resolve:
function checkAddUser(input) { return new Promise((resolve) => { let message; if (input.email === '') { message = 'Please enter an email address.'; } else if (input.first_name === '') { message = 'Please enter your first name.'; } else { message = false; } resolve(message); }); }
方案2:用条件表达式简化赋值
通过嵌套三元表达式直接给const message赋值,避免分支内重复定义变量:
function checkAddUser(input) { return new Promise((resolve) => { const message = input.email === '' ? 'Please enter an email address.' : input.first_name === '' ? 'Please enter your first name.' : false; resolve(message); }); }
方案3:进一步简化Promise创建
由于这个函数里没有异步操作,直接用Promise.resolve()返回已解决的Promise即可,无需手动构造Promise对象:
function checkAddUser(input) { const message = input.email === '' ? 'Please enter an email address.' : input.first_name === '' ? 'Please enter your first name.' : false; return Promise.resolve(message); }
补充说明
- 原代码未用到
reject参数,可直接省略,让代码更简洁;后续如果需要处理错误场景,再添加reject的调用即可。
内容的提问来源于stack exchange,提问作者BostonPHPGuy
相关产品推荐
相关产品推荐

