每当我们创建一个新的promise类时,我们都会这样做:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("success");
}, 4000)
});
promise.then((result) => console.log(result));
所以,这是我思考背后事物如何运作的方式:
Promise
将有一个箭头函数的构造函数setTimeout
将在指定的时间限制内运行resolve('success')
函数,并返回一个具有resolved
状态的Promise
(我认为这是另一个类,因为它有构造函数(then()
函数将运行第一步传递的任何函数(因此,在本例中,返回Promise的匿名箭头函数(
首先,为什么我们可以传递解析并将其用作setTimeout
中的函数?我想我们甚至还没有宣布,这不是窗口的一部分。
第二,有人能纠正我的思维方式吗(这样也许可以帮助我解释这个过程中发生了什么(?
不确定你的意思。
setTimeout将在指定的时间限制内运行解析("成功"(函数,并返回具有已解析状态的Promise
否。setTimeout
、resolve
和传递给new Promise
的箭头函数都不会返回promise。
then()
函数将运行第一步上传递的任何函数
否。传递给new Promise
的函数(称为执行器(会立即被调用。不是来自.then()
调用。请注意,即使您没有调用.then()
,或者以后只调用,或者多次调用,它也会被调用。
为什么我们可以传递
resolve
并将其用作函数?我想我们甚至还没有宣布,这不是窗口的一部分。
new Promise
构造函数创建resolve
和reject
函数。它们只更改promise的内部状态,以及在promise对象上注册的日程处理程序。
您可能想看看这个示例实现,或者promise/defer库是如何实现的?。