Promise简介
Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示。(简单点说就是处理异步请求。。我们经常会做些承诺,如果我赢了你就嫁给我,如果输了我就嫁给你之类的诺言。这就是promise的中文含义。一个诺言,一个成功,一个失败。) 这是MDN上对promise的介绍,文字含义不如代码来的实在。那么怎么通过代码了解Promise呢?
console.dir(Promise)
可以看到Promise对象其实是一个构造函数。
Promise静态方法
Promise.all()
Promise.race()
Promise.reject()
Promise.resolve()
Promise实例方法
Promise.prototype.catch()
Promise.prototype.then()
Promise用法
Promise 是异步编程的一种解决方案,那么我们接下来看看Promise到底怎么用!
创建一个Promise实例
从图中我们可以看出promise1的状态时“pending”、promise2的状态是“resolved”、promise3的状态是“rejected”。
一个 Promise
有以下几种状态:
pending: 初始状态,不是成功或失败状态。
resolved: 意味着操作成功完成。
rejected: 意味着操作失败。
resolve方法用于将promise状态: pending => resolved
reject方法用于将promise状态:pending => rejected
现在我们知道了resolve和reject方法可以改变promise的状态,那么像如下代码又会发生什么情况呢?
我们可以看到promise1最后的状态是“resolved”,promise2最后的状态是“rejected”。因此我们可以知道一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。
静态方法
Promise.all(array)
此方法用于将多个promise实例包装成一个新的promise实例,这个新的promise实例只有当传入的所有promise实例的状态都为resolved时状态才会变成resolved,并调用成功方法,成功方法的回调参数为传入promise实例的返回值数组(顺序与传入promise实例顺序一致),所以我们可以用此方法实现并行执行多个异步方法。
Promise.race(array)
此方法同样是用于将多个promise实例包装成一个新的promise实例,但是与Promise.all方法不一样的地方是这个新的promise实例只要传入的promise实例中的任意一个状态改变,这个新实例的状态就会跟着改变,并且回调方法中的参数为改实例的返回值。
Promise.reject(reason)
返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法。
Promise.resolve(value)
返回一个状态由给定value决定的Promise对象。简单的用法就是可以用此方法讲一个现有的对象转换为Promise对象。
value分为以下三种情况
Promise.resolve(value);
当value为空,基本类型或者不带then方法的对象时,返回的Promise对象状态为fulfilled,并且将该value传递给对应的then方法
Promise.resolve(promise);
当value为promise对象时,则直接返回该对象。
Promise.resolve(thenable);
当value为thenable(即,带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定。
实例方法
Promise.prototype.then()
相信大家看到这里已经明白then方法的用处了,Promise.prototype.then()用于为 Promise 实例添加状态改变时的回调函数并返回一个新的promise。该方法的第一个参数是Resolved状态的回调函数,第二个参数(可选)是Rejected状态的回调函数
Promise.prototype.catch()
用于指定发生错误时的回调函数。如果这个回调被调用,新 promise 将以它的返回值来resolve,否则如果当前promise 进入fulfilled状态,则以当前promise的肯定结果作为新promise的肯定结果.
在promise方法或then回调方法中抛出错误都会被catch捕获。
今天就写到这里,文章中有错误的地方希望大家指出,谢谢。
望大家多多转发,好人一生平安
本文暂时没有评论,来添加一个吧(●'◡'●)