快速了解 Promise

promise是js编程中进行异步编程新的解决方案(旧的是用纯回调实现的)

​    从语法上说:promise是一个构造函数

​    从功能上说:promise对象用来封装一个异步操作并可以获取其结果

错误对象:Error,所欲错误类型的父类

常见的内置错误

​    ReferenceError:引用的变量不存在

console.log(a) //ReferenceError:a is noe defined

TypeError:数据类型不正确的错误

let b = null
console.log(b.xx) //TypeError:cannot read property 'xx' of undefined

RangeError:数据值不在其所允许的范围内

function fn(){
fn()
}
fn() //RangeError:Maximum call stack size excees

SyntaxError:语法错误

错误处理

捕获错误:try...catch

try{
let b;
console.log(b.xx)
}catch(error){
console.log(error.message)//出错信息
console.log(error.stack)//显示的更多
}
console.log('出错后继续向下执行')

抛出错误:throw error

function something(){
if(Data.now()%2===1){
console.log('当前时间为奇数,可以执行任务')
}else{//抛出异常,由调用者处理
throw new Error('当前的时间为偶数')
}
}

promise的状态改变

1.pending变为resolve

2.pending变为rejected

说明:只用这两种,且一个promise对象只能改变一次

​            无论是成功还是失败,都会有一个结果数据

​            成功的结果数据一般为value,失败的数据一般为reason

Promise 的基本使用

创建Promise对象

	//1.创建一个新的Promise对象
const p = new Promise((resolve,reject)=>{  //执行器函数
	//2.执行异步操作任务
	setTimeout(()=>{
        const time = Date.now()//如果当前时间时偶数表示成功,否则失败
        //3.1成功了调用resolve(value)
        if(time %2 ==0){
            resolve('成功的数据,time'+time)
        }else{
            //3.2失败了调用个reject(reason)
            reject('失败的数据,time'+time)
        }
    },1000)
})

p.then(
	value =>{//得到成功的数据value     onResolve
        console.log('成功的回调',value)
    },
    reason =>{//得到失败的回调reason    onReject
        console.log('失败的回调',reason)
    }
)

promise解决的问题

1.指定回调的方式更加灵活:

​            旧的:必须在启动异步任务之前指定回调函数;

​            promise:启动异步任务=>返回promise对象=> 给promise对象绑定回调函数

​    2.支持链式调用,可以解决回调地狱的问题

​            什么是回调地狱? 回调函数嵌套调用,外部函数异步执行的结果是内部嵌套的回调函数的执行条件

​            回调地狱的缺点:  不便于阅读,不便于异常处理

​            解决方案?promise链式调用

​            终极解决方案? async/await

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值