Promise.resolve() 和 Promise.reject()
Promise.resolve()
resolve函数的作用是:将promise对象的状态从“未完成”变成“成功”(pending=>resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出来;
Promise.resolve()方法的参数分成四种情况。
1、参数是一个Promise实例
如果参数是promise实例,那么Promise.resolve将不做任何修改、原封不动地地返回这个实例
2、参数是一个thenable对象
thenable对象指的是具有then方法的对象
Promise.resolve() 方法会将这个对象转为Promise对象,然后就立即执行thenable对象的then()方法
3、参数不是具有then()方法的对象,或根本就不是对象
如果参数是一个原始值,或者是一个不具有then()方法的对象,则Promise.resolve()方法返回一个新的 Promise 对象,状态为resolved
const p = Promise.resolve('Hello');
p.then(function (s) {
console.log(s)
});
字符串Hello不属于异步操作(判断方法是字符串对象不具有 then 方法),返回 Promise 实例的状态从一生成就是resolved,所以回调函数会立即执行。Promise.resolve()方法的参数,会同时传给回调函数。
4、不带有任何参数
Promise.resolve()方法允许调用时不带参数,直接返回一个resolved状态的 Promise 对象。
所以,如果希望得到一个 Promise 对象,比较方便的方法就是直接调用Promise.resolve()方法。
Promise.reject()
Promise.reject(reason)方法也会返回一个新的Promise实例,该实例的状态我哦rejected
const p = Promise.reject('出错了');
// 等同于
const p = new Promise((resolve, reject) => reject('出错了'))
p.then(null, function (s) {
console.log(s)
});
// 出错了
上面的代码生成一个Promise对象的实例P,状态为rejected,回调函数会立即执行
Promise.reject()方法的参数,会原封不动地作为reject的理由,变成后续方法的参数
Promise.reject('出错了')
.catch(e => {
console.log(e === '出错了')
})
// true
上面代码中,Promise.reject()方法的参数是一个字符串,后面catch()方法的参数e就是这个字符串