JavaScript创建Promise时能否仅传入单个参数?
问题解答
1. 仅传入resolve创建Promise是否合法?
完全合法。JavaScript函数本身允许忽略不需要的入参,Promise构造函数的执行器参数本身是普通JS函数,你只声明接收第一个resolve参数完全符合ECMAScript规范,你给出的代码let promise = new Promise((resolve) => {});可以正常运行,没有任何语法问题。
2. 该写法是否属于良好开发实践?
分场景判断:
- 如果你确认你的Promise执行逻辑100%不会出现任何异常、不存在任何需要触发reject的场景,这种写法没有任何问题,不需要强行声明用不上的
reject参数,反而会增加冗余代码。 - 但要注意一个隐藏的风险:即使你没有手动调用
reject,如果Promise执行体中的代码抛出同步错误(比如访问未定义变量的属性、数组越界等),JavaScript会自动将该错误作为reject原因抛出,如果你没有为该Promise添加catch处理逻辑,会触发未捕获的Promise rejection报错。示例如下:
let promise = new Promise((resolve) => { // 若undeclaredObj未定义,这里会抛出同步错误,自动触发reject resolve(undeclaredObj.data) })
额外优化建议:如果你的Promise只是用来返回一个确定的成功结果,可以直接使用更简洁的
Promise.resolve(返回值)语法,不需要手动调用Promise构造函数,代码可读性更高。
内容的提问来源于stack exchange,提问作者Kyuberi
相关产品推荐
相关产品推荐

