promise是什么?
1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列
promise包含三种状态:
- 待定(pending): 初始状态,不是成功或失败状态。
- 已兑现(fulfilled): 意味着操作成功完成。
- 已拒绝(rejected): 意味着操作失败。
只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是“承诺”,表示其他方式无法改变。
什么是异步?
举一个例子:
将一个耗时很长的A项目交给系统之后,继续去做B的项目,当B项目做完,回来继续做A剩下的项目。AB项目完成的顺序与交给系统的时间无关,所以叫异步。
也就是说:异步指的是每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
什么是同步?
再举一个例子:
一个饭店里面,有一个服务员A。来了一名顾客甲,A就来服务甲,在服务的期间,来了一名顾客乙,A需要等甲的菜上齐了,吃完,并且结完账后再去服务员乙顾客。有顺序的完成一系列工作。
也就是说:同步指的是一次只能完成一件任务,并且得到结果。如果有多个任务,必须排队,前面一个任务完成,再执行后面一个任务,以此类推。
promise的创建
想要创建一个promise对象,可以使用new来调用Promise构造器来进行实例化。
创建Promise实例的步骤:
var promise = new Promise(function(resolve, reject) {
// 异步处理
// 处理结束后、调用resolve 或 reject
});
Promise使用
Promise 是一个构造函数, new Promise 返回一个 promise对象 接收一个执行函数作为参数, 有两个函数类型形参resolve reject。
promise对象方法
- then方法注册 当resolve(成功)/reject(失败)的回调函数
promise.then(onFulfilled , onRejected );
// onFulfilled 是用来接收promise成功的值
// onRejected 是用来接收promise失败的原因
※※※ then是异步执行方式。
- resolve(成功)会被onFulfilled调用
var promise = new Promise(function(resolve, reject) {
resolve("成功")//状态由 pending => fulfilled
});
promise.then((result) => {
console.log(result);
}),reason => {
//不会被调用
}
- reject(失败) onRejected会被调用
var promise = new Promise(function(resolve, reject) {
reject("失败")//状态由 pending => rejected
});
promise.then((result) => {
//不会被调用
}),reason => {
console.log(rejected);
}
- promise.catch
在链式写法中可以捕获前面then中发送的异常
promise.then((result) => {
//成功调用
}).catch((error) => {
//捕捉错误
});
- Promise的静态方法
- Promise.resolve 返回一个fulfilled状态的promise对象
const promise = new Promise(resolve => {
resolve('hello');
});
- Promise.reject 返回一个rejected状态的promise对象
Promise.reject("error");
new Promise((res, rej) => {
reject("error");
});