什么是Promise
promise是ES6新增的,Promise其实是借鉴Node所产生的,而Node绝大都是异步代码,写了那么多的回调,而Promise就是比回调更有好的方式。
所谓Promise,就是一个对象,用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的API,可供进一步处理。
new Promise
Promise是一个构造函数(类),可以使用new运算符新建一个实例,然后就可以使用了,构造函数接受一个函数作为参数。
var p = new Promise((resolve, reject) => {
resolve(123)
});
p.then((value) => {
console.log('p success :', value);
},(err)=> {
//失败输出
});
输出结果: p success :123
新建Promise对象时传入的函数,接受两个参数,resolve和reject,分别用来改变Promise的状态,创建好,调用resolve和reject时,可以传入参数,这个参数会自动传递个后面的回调函数中。
创建好promise后,可以通过then方法定制状态变化后的回调函数。
Promise.prototype 属性![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/adf21f5fa98226405d04585a55b992f6.png)
Promise.prototype有三个方法catch、finally、then,我们重点关注catch、then即可
Promise.prototype.catch
catch() 方法只处理Promise被拒绝的情况,并返回一个Promise。该方法的行为和调用Promise.prototype.then(undefined, onRejected)相同。
p.catch((reason) => {
// 拒绝
});
Promise.prototype.then
then()方法返回一个Promise。它有两个参数,分别为Promise在 success 和 failure 情况下的回调函数。
p.then((value) => {
// 成功
}, (err) => {
// 拒绝
});
Promise 属性
我们将重点关注的属性:all、race、reject、resolve
Promise.all
Promise.all(iterable) 方法返回一个promise,该promise会在iterable参数内的所有promise都被解决后被解决。iterable是一个可迭代对象。
Promise.all(iterable);
Promise.race
Promise.race(iterable)方法返回一个promise,这个promise在iterable中的任意一个promise被解决或拒绝后,立刻以相同的解决值被解决或以相同的拒绝原因被拒绝。
Promise.race(iterable);
Promise.reject
Promise.reject(reason)方法返回一个用reason拒绝的Promise。
Promise.reject(reason);
Promise.resolve
Promise.resolve(value)方法返回一个以给定值resolve掉的Promise对象。但如果这个值是thenable的(就是说带有then方法),返回的promise会“追随”这个thenable的对象,接收它的最终状态(指resolved/rejected/pendding/settled);否则这个被返回的promise对象会以这个值被fulfilled。value 用来resolve待返回的promise对象的参数。既可以是一个Promise对象也可以是一个thenable。
Promise.resolve(value);
Promise.resolve(promise);
Promise.resolve(thenable);