1. Promise的含义
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
2. Promise的特点
- 对象的状态不受外界影响。
Promise
对象代表一个异步操作,有三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败)
(resolved
一般代指fulfilled
) - 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从
pending
变为fulfilled
和从pending
变为rejected
。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为resolved
(已定型)
3. 基本用法
生成一个Promise
实例:
const pro = new Promise(function(resolve, reject) {
if (/*成功条件*/) {
resolve(res);
} else { // 失败条件
reject(err);
}
})
-
Promise
对象接受一个函数作为参数,该函数的参数分别是resolve
和reject
。它们是两个函数,由JS引擎提供,无需自己部署。 -
resolve
函数的作用:将Promise
对象的状态由未完成pending
变为成功resolved
,在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; -
reject
函数的作用:将Promise
对象的状态由未完成pending
变为失败rejected
,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去;
实例生成后,用then
方法指定resolved
状态和rejected
状态的回调函数:
pro.then((res) => {
console.log(res);
},(err) => {
console.log(err);
})
-
then
方法可以接受两个回调函数作为参数。第一个回调函数是Promise
对象的状态变为resolved
时调用,第二个回调函数是Promise
对象的状态变为rejected
时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise
对象传出的值作为参数。
4. 举个例子
const a = 3;
const promise = new Promise(function(resolve, reject) {
console.log('new promise');
if(a < 5) {
resolve('a < 5');
} else {
reject('a > 5');
}
})
promise.then((res) => {
console.log(res);
},(err) => {
console.log(err);
})
console.log('end')
结果:
new promise
end
a < 5
Tips:
-
Promsie
新建后会立即执行,所以new promsie
先输出 -
then
方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行,所以end
最后输出。
网友评论