Promise 是异步编程的一种解决方案,比传统的解决方案 —— 回调函数和事件 —— 更合理和更强大。
1、Promise 的基本使用
Promise 是一个构造函数,通过new来实例对象。
const promise = new Promise((resolve, reject)=>{})
函数中接收的两个参数
- resolve :成功函数
- reject :失败函数
1)Promise 三大状态
- pending:进行中
- fulfilled:已成功
- rejected:已失败
2)Promise 状态的改变
Promise对象的状态改变,只有两种可能:从pending
变为fulfilled
和从pending
变为rejected
。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。
示例
var promise=new Promise((resolve, reject)=>{
resolve() 调用函数,使当前promise对象状态fulfilled
reject() 调用函数,使当前promise对象状态rejected
})
3)Promise 的结果
示例
var promise=new Promise((resolve, reject)=>{
//通过调用resolve函数,传递参数,改变当前promise对象的结果
resolve('成功的结果')
//reject('失败的结果')
})
console.dir(promise)
2、Promise 的方法
1)then()的方法
var promise=new Promise((resolve, reject)=>{
//通过调用resolve函数,传递参数,改变当前promise对象的结果
resolve('成功的结果')
//reject('失败的结果')
})
promise.then((res)=>{
//当promise 状态是fulfilled时 执行
console.log('成功调用')
},()=>{
//当promise 状态是reject时 执行
console.log('失败调用')
})
console.dir(promise)
在then方法中,通过return将返回Promise实例的改为fulfilled状态
如果then方法中代码出错,会将Promise实例的改为rejected状态
//如果Promise状态不改变,then的方法不执行
var promise=new Promise((resolve, reject)=>{
resolve('成功的结果')
})
const t=promise.then((res)=>{
//使用return 可以将t实例的状态改为fulfilled
//如果在这里代码出错,会将Promise实例的改为rejected状态
console.log('成功调用')
return 1212
},()=>{
console.log('失败调用')
})
t.then((res)=>{
console.log('成功2')
},()=>{
console.log('失败调用')
})
1)catch()的方法
catch()方法是.then(null, rejection)
或.then(undefined, rejection)
的别名,用于指定发生错误时的回调函数(代码出错及Promsie的状态为rejected时执行
)。
Promise('/posts.json').then(function(posts) {
// ...
}).catch(function(error) {
// 处理 Promise和 前一个回调函数运行时发生的错误
console.log('发生错误!', error);
});
网友评论