在MDN中指出:
executor函数由Promise实现立即执行, 传递解析函数和拒绝函数(在Promise构造函数甚至返回创建的对象之前调用执行程序)。
在对象创建期间,最初的 executor 执行中使用了什么功能 resolve 和 reject ?那时还没有任何处理程序附加.then。
我的理解是 executor 是一个传递给Promise构造函数的函数,带有两个参数: resolve 和 reject (它们本身是函数) 。如果在Promise创建时调用了 executor ,则调用它的 resolve 和 reject 函数是什么?
谢谢您的帮助。
答案 0 :(得分:2)
执行程序函数被执行,并且要返回值或将错误引发给promise处理程序,它需要一些回调。这些回调应在执行范围内可用,并且应从诺言中可用。这是在以下示例中由promise的构造函数传递的resolve
和reject
值的目的。
var a = new Promise((resolve,reject) => {
setTimeout(()=>{
if(Math.random() > 0.5) //resolve or reject on 50% probability
resolve('this value to the handler');
else
reject('uh oh! there is an error');
},2000);
});
现在,如果您在.then()
上附加.catch()
或a
。上面的setTimeout
将值传递给我们提供的resolve和拒绝回调。
因此,将resolve
和reject
视为提供给执行者以与原始诺言处理程序进行回传的一些值。