Promise.resolve()
方法返回一个以给定值解析后的 Promise 对象。
语法:
Promise.resolve(value);
类型声明:
interface PromiseConstructor {resolve(): Promise<void>;resolve<T>(value: T | PromiseLike<T>): Promise<T>;}
参数说明:
参数 | 说明 | 类型 |
---|---|---|
value | 见下方 | any |
根据传入参数的不同,会有不同的响应效果。
.then()
方法如果参数是 Promise 实例,那么 Promise.resolve
将不做任何修改、原封不动地返回这个实例。
thenable
对象指的是具有 then
方法的对象,比如下面这个对象。
let thenable = {then: (resolve, reject) => resolve(100),};
Promise.resolve
方法会将这个对象转为 Promise 对象,然后就立即执行 thenable
对象的 .then()
方法。
let thenable = {then: (resolve, reject) => resolve(100),};let promise = Promise.resolve(thenable);promise.then((value) => console.log(value)); // 100
上述代码中,当 thenable
对象的 then
方法执行后,对象 promise
的状态就变为 Fulfilled,从而立即执行最后那个 .then()
方法指定的回调函数。
如果参数是一个原始值,或者是一个不具有 then
方法的对象,则 Promise.resolve
方法返回一个新的 Promise 对象,状态为 Fulfilled。
const promise = Promise.resolve('Hello');promise.then((v) => console.log(v));// 'Hello'
由于传入 Promise.resolve
方法的参数非具有 then
方法的对象,因此判断该参数不属于异步操作,返回状态为 Resolve 的 Promise 实例,并且立即执行回调函数。Promise.resolve
方法的参数,会同时传给回调函数。
Promise.resolve
方法允许调用时不带参数,直接返回一个 Fulfilled 状态的 Promise 对象。
如果希望得到一个 Promise 对象,比较方便的方法就是直接调用 Promise.resolve
方法。
需要注意的是,状态为 Fulfilled 的 Promise 对象,是在本轮 事件循环(Event Loop)的结束时,而不是在下一轮事件循环的开始时。
Promise.resolve(value)
可以认为是 new Promise()
的快捷方式。返回的 Promise 对象将立即进入 Fulfilled 状态。
Promise.resolve('Fulfilled').then((res) => {console.log(res); // 'Fulfilled'},(rej) => {console.log(rej); // 不会调用});
如果传入的参数为数组,则参数为非 Thenable 对象,会返回新的 Fulfilled 状态的 Promise 实例。
const promise = Promise.resolve([0, 1, 2]);promise.then((v) => {console.log(v[0]); // 0});
如果传入的参数为 Promise 的实例对象,那么会直接返回该 Promise 的实力对象。
const foo = new Promise('foo');const bar = Promise.resolve(foo);bar.then((value) => {console.log(value);// 2. 输出: 'foo'});console.log(foo === bar);// 1. 输出: true// 这里有同步异步先后执行的区别