JavaScript Promise中的resolve/reject函数在哪里定义?命名是否固定?
resolve 与 reject 的来源
你传给Promise构造函数的回调函数叫做执行器(executor),会在new Promise实例化的过程中被Promise内部逻辑同步调用。resolve和reject本质就是Promise构造函数内部预先定义好的两个工具函数,构造函数调用你传入的执行器时,会按「第一个参数为成功状态触发函数、第二个参数为失败状态触发函数」的固定顺序把这两个内部方法作为实参传入,你在执行器里拿到的两个参数就是这两个内置函数。
至于为什么不能用myPromise.resolve的形式调用:执行器的运行时机早于Promise实例创建完成并返回的时机,执行器运行时你还没有拿到myPromise这个实例对象,自然不可能通过实例调用这两个方法。注意不要和Promise.resolve这个全局静态方法混淆,二者作用相似但属于不同的调用入口。
关于参数命名的问题
这两个形参的名字完全可以自定义,你命名为resolve1、success、ok、fail都不会有任何语法问题,它们不是JS预先注册的关键字或者保留字。
Promise构造函数只会固定按顺序给执行器传递两个实参,和你给形参起什么名字没有任何关联。业界统一命名为resolve和reject只是约定俗成的编码规范,目的是提升代码可读性,没有任何强制要求。
你完全可以按如下方式编写代码,功能完全不受影响:
const myPromise = new Promise((successCallback, failCallback) => { setTimeout(() => { successCallback('foo'); }, 300); });
内容的提问来源于stack exchange,提问作者coffeemame
相关产品推荐
相关产品推荐

