一,Promise是什么?
1.抽象表达
1)Promise是一门新的技术(ES6规范)
2)Promise是JS中进行异步编程的新的解决方案(异步编程包括但不限于:fs文件操作,数 据库操作,Ajax,定时器)
2.具体表达
1)从语法上来说:Promise是一个构造函数
2)从功能上来说:Promise对象是用来封装一个异步操作并可以获取其成功/失败的结果值
二,为什么要使用Promise
1.指定回调函数的方式更加灵活
1)旧方法:必须在启动异步任务前指定
2)promise:启动异步任务=>返回promise对象=>给promise对象绑定回调函数
2.支持链式调用,可以解决回调地狱问题(在面试时一句话回答promise作用)
三,promise写法
const p = new Promise ((resolve,reject)=>{
if(条件){
resolve(data) //成功时调用resolve函数
}else{
reject(data) //成功时调用reject函数
}
})
p.then(value=>{
//成功执行的回调函数
},reason=>{
//失败执行的回调函数
})
四,用Promise写Ajax请求
const p = new Promise((sesolve,reject)=>{
//创建对象
var xhr = XMLHttpRequest()
//初始化
xhr.open('get','url')
//发送请求
xhr.send()
//处理响应结果
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
//判断响应状态码
if(xhr.status>=200 && xhr.status<300){
resolve(xhr.response)
}else{
reject(xhr.status)
}
}
}
})
//调用then方法
p.then(value=>{
console.log(value)
},reason=>{
console.warn(reason)
})