我的回答

1. 参数是一个 Promise 实例

如果参数是一个 Promise 实例,那么 Promise.resolve 将不做任何修改,原封不动的返回这个实例。

2. 如果参数是一个 thenable 对象

thenable 对象值得是具有 then 方法 的对象,比如下面这个对象

  1. let thenable = {
  2. then:function(resolve,reject){
  3. console.log('aaaa');
  4. resolve('hello');
  5. }
  6. }

Promise.resolve 方法会将这个对象转为 Promise 对象,然后立即执行 thenable 对象的 then 方法。返回的 Promise 会“跟随”这个 thenable 对象,采用它的最终状态;

  1. let thenable = {
  2. then:function(resolve,reject){
  3. console.log('aaaa');
  4. resolve('hello');
  5. }
  6. }
  7. let p = Promise.resolve(thenable);//aaa
  8. p.then(res=>console.log(res));//hello

3. 参数不是具有 then 方法的对象或根本不是对象


如果参数一个原始值,或者是一个不具有 then 方法的对象,那么 Promise.resolve 方法返回一个新的 Promise 对象,状态为 resolved。

  1. let p = Promise.resolve('aaa');
  2. p.then(res=>console.log(res));//aaa


4. 不带任何参数

Promise.resolve 方法运行在调用时不带有任何参数,而直接返回一个 resolved 状态的 Promise 对象。

  1. let p = Promise.resolve();
  2. p.then(()=>{})

参考回答

Promise.resolve(value)方法返回一个已给定值解析后的Promise对象

  • 如果这个值是一个promise,那么将返回这个promise
  • 如果这个值是thenable(带有then的方法),返回的promise会跟随这个thenable的对象,采用它的最终状态
  • 返回的promise将以此值完成,此函数将promise对象的多层嵌套展平
  • obj可以是正常值,可以是promise对象,也可以是thenable