文章目录
- Promise.resolve 方法,Promise.reject 方法
- 总结一下:Promise.resolve方法的参数分为四种情况
- 1.参数是一个Promise实例
- 2.参数是一个thenable对象
- 3.参数不是具有then方法的对象或根本不是对象
- 4.不带有任何参数
菜鸟教程之promise
tips:阅读本文之前,应该对promise有初步的认识和了解。
Promise.resolve 方法,Promise.reject 方法
有时需要将现有对象转为Promise对象,Promise.resolve方法就起到这个作用。
js">var jsPromise = Promise.resolve($.ajax('/whatever.json'));
上面代码将 jQuery 生成 deferred 对象,转为一个新的 ES6 的 Promise 对象。
如果 Promise.resolve 方法的参数,不是具有 then 方法的对象(又称 thenable 对象),则返回一个新的 Promise 对象,且它的状态为fulfilled。
js">var p = Promise.resolve('Hello');
p.then(function (s){ console.log(s) }); // Hello
上面代码生成一个新的Promise对象的实例p,它的状态为fulfilled,所以回调函数会立即执行,Promise.resolve方法的参数就是回调函数的参数。
如果Promise.resolve方法的参数是一个Promise对象的实例,则会被原封不动地返回。
Promise.reject(reason)方法也会返回一个新的Promise实例,该实例的状态为rejected。Promise.reject方法的参数reason,会被传递给实例的回调函数。
js">var p = Promise.reject('出错了');
p.then(null, function (s){
console.log(s)
}); // 出错了
上面代码生成一个Promise对象的实例,状态为rejected,回调函数会立即执行。
总结一下:Promise.resolve方法的参数分为四种情况
1.参数是一个Promise实例
如果参数是Promise实例,那么Promise.resolve将不做任何修改,原封不动地返回这个实例。
2.参数是一个thenable对象
thenable对象指的是具有then方法的对象,比如下面这个对象。
js">let thenable = {
then: function(resolve, reject){
resolve("ok")
}
}
Promise.resolve方法会将这个对彖转为Promise对象,然后立即执行thenable对象的then方法。返回的promise会“跟随”这个thenable的对象,采用它的最终状态;
js">let thenable = {
then: function(resolve, reject){
console.log("thenable被执行")
resolve("ok")
}
}
let p = Promise.resolve(thenable);
p.then((res)=>{
console.log(res); // ok
})
3.参数不是具有then方法的对象或根本不是对象
如果参数是一个原始值,或者是一个不具有then方法的对象,那么Promise.resolve方法返回一个新的Promise对象,状态为Resolved。
js">let p = Promise.resolve("ok")
p.then(res=>{
console.log(res); // ok
});
4.不带有任何参数
Promise.resolve方法允许在调用时不带有任何参数,而直
接返回一个Resolved状态的Promise对象。
js">let p = Promise.resolve();
p.then(()=>{
console.log("ok")
})