我的回答
1. 参数是一个 Promise 实例
如果参数是一个 Promise 实例,那么 Promise.resolve 将不做任何修改,原封不动的返回这个实例。
2. 如果参数是一个 thenable 对象
thenable 对象值得是具有 then 方法 的对象,比如下面这个对象
let thenable = {
then:function(resolve,reject){
console.log('aaaa');
resolve('hello');
}
}
Promise.resolve 方法会将这个对象转为 Promise 对象,然后立即执行 thenable 对象的 then 方法。返回的 Promise 会“跟随”这个 thenable 对象,采用它的最终状态;
let thenable = {
then:function(resolve,reject){
console.log('aaaa');
resolve('hello');
}
}
let p = Promise.resolve(thenable);//aaa
p.then(res=>console.log(res));//hello
3. 参数不是具有 then 方法的对象或根本不是对象
如果参数一个原始值,或者是一个不具有 then 方法的对象,那么 Promise.resolve 方法返回一个新的 Promise 对象,状态为 resolved。
let p = Promise.resolve('aaa');
p.then(res=>console.log(res));//aaa
4. 不带任何参数
Promise.resolve 方法运行在调用时不带有任何参数,而直接返回一个 resolved 状态的 Promise 对象。
let p = Promise.resolve();
p.then(()=>{})
参考回答
Promise.resolve(value)方法返回一个已给定值解析后的Promise对象
- 如果这个值是一个promise,那么将返回这个promise
- 如果这个值是thenable(带有then的方法),返回的promise会跟随这个thenable的对象,采用它的最终状态
- 返回的promise将以此值完成,此函数将promise对象的多层嵌套展平
- obj可以是正常值,可以是promise对象,也可以是thenable