Day32笔记
一、Promise异步编程
-
Promise是异步编程的一种解决方案。
-
从语法上讲,
Promise
是一个内置对象(构造函数),自身上有resolve
、reject
等方法,原型上有then
、catch
等方法。new Promise(function(resolve,reject){})
-
Promise对象提供了简洁的API,使得控制异步操作更加容易,避免了回调地域的问题。
二、Promise的三种状态
- pending => 正在请求
- rejected => 已失败
- fulfilled => 已成功
三、Promise的特点
- Promise对象的状态改变只有两种可能: pending(正在请求) => rejected(已失败)、 pending(正在请求) => fulfilled(已成功)。
- 只要上面两种情况发生,状态就确定了,不会再改变,一直保持这个结果,这时就被称为resolved(已定型)。
- Promise对象的状态不受外界影响,只有异步操作可以决定Promise的状态,Promise的英文意思是 “承诺” ,表示其他任何操作都无法改变这个状态。
四、Promise的使用
-
resolved:异步请求成功时,通过
resolved
回调函数返回Promise的结果。 -
rejected:异步请求失败时,通过
rejected
回调函数返回Promise的结果。 -
then:对应
resolved
回调函数,通过then
回调函数返回 resolved的结果。 -
catch:对应
rejected
回调函数,通过then
回调函数返回 rejected的结果。
五、Promise的基本操作
// 以异步读取文件为例,先引入fs
const fs = require('fs')
// 使用promise对异步进行封装
const promiseObj = new Promise(function(resolved,rejected){
fs.readFile('文件路径',function(err,data){
// 文件读取失败时
if(err){
// 用rejected返回失败结果
rejected(err);
return
}
// 用resolved返回成功结果
resolved(data);
})
}
// 使用then处理resolved返回的data内容
promiseObj.then(function(data){
console.log(data)
})
// 使用catch处理rejected返回的err内容
promiseObj.catch(function(err){
console.log(err)
})
六、Promise的链式写法(简写)
const fs = require('fs')
new Promise((resolved,rejected) => {
fs.readFile('文件路径',(err,data) => {
if(err){
rejected(err);
return
}
resolved(data);
})
}).the( data => console.log(data) ).catch( err => console.log(err) )