ES6是一个非常重要和好用的特性就是Promise
Promise作用
Promise 是异步编程的一种解决方法
什么时候需要处理异步事件
一种很常见的场景:网络请求
当我们封装一个网络请求的函数,因为不能立即拿到结果,所以不能将结果简单的返回
所以往往我们会传入另外一个函数,在数据请求成功时,将数据通过传入的函数回调出去
如果只是一个简单的网络请求,那么这种方案不会带来很大麻烦
但是,当网络请求非常复杂时,回调就会很麻烦
使用的就是链式编程,可以是代码更加具有逻辑性
new Promise((resolve,reject)=>{
setTimeout(()=>{
//成功的时候调用resolve
//resolve('hello world')
//失败的时候调用reject
reject('error message')
},1000)
}).then((data) =>{
//可处理多行代码
console.log(data);
console.log(data);
console.log(data);
console.log(data);
console.log(data);
}).catch((err) =>{
console.log(err);
})
Promise三种状态
首先,当我们开发中有异步操作时,就可以给异步操作包装一个Promise
异步操作之后会有三种状态:
pending:等待状态,比如正在进行网络请求,或者定时器没有到时间
fulfill:满足状态,当我们主动回调了resolve 时,就处于该状态,并且会回调 .then()
reject:拒绝状态,当我们主动回调了 reject 时,就处于该状态,并且会回调 .catch()
new Promise((resolve,reject)=>{
setTimeout(()=>{
//成功的时候调用resolve
//resolve('hello world')
//失败的时候调用reject
reject('error message')
},1000)
}).then((data) =>{
//可处理多行代码
console.log(data);
console.log(data);
console.log(data);
console.log(data);
console.log(data);
}).catch((err) =>{
console.log(err);
})
Promise 链式调用
在Promise 的流程图时,发现无论是 then 还是 catch 都可以返回一个 Promise 对象
所以,我们的代码其实是可以进行链式调用的:
通过Promise 包装了一下新的数据,将 Promise 对象返回了
Promise.resolve():将数据包装成 Promise 对象,并在 内部回调了 resolve()函数
Promise.reject() :将函数包装成 Promise 对象,并且在内部回调了 reject() 函数