版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sharpdeng/article/details/79452916
Promise的理解和使用
前言: 该文章是在学习慕课网上的 promise入门一课的笔记,大家如果有兴趣的话可以直接去看视频,这位老师讲得还不错。
概念:
- 官方
1-1. promise对象用于异步计算;
1-2. promise表示一个现在,将来或用不可能可用的值 - 理解
2-1. 主要用于异步计算;
2-2. 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果;
2-3. 可以在对象之间传递和操作promise,帮助我们处理队列;
相关知识
1.同步:不同的事情严格按照顺序进行,如:步骤A,B要完全正确执行完A后才进行步骤B的处理;
2.异步:不同是事情可同时进行,如:步骤A,B可以同时进行执行;
例子:现在你需要完成两件事清,洗澡和去便利店买东西,但只有你一个人处理这些事的时候,你只能先做完一件事再去做另一件事,你不可能说一边洗澡一边去便利店买东西,这就是同步;但如果这个时候你女(男)朋友在,那你可以去洗澡,然后同时叫你的女(男)朋友在你洗澡的同时去便利店买东西,这样两件事是可以同时进行的,就是异步
用法
例子1(基础用法):
new promise(function(resolve,reject){
//执行成功后执行回调函数
resolve()
//执行失败后执行的回调函数
reject()
})
.then( val =>{ //promise成功执行完后执行该回调
console.log(val)
})
例子2(promise最常用到的方法)
new promise(function(resolve,reject){
//doSomething;
//执行成功后执行回调函数
resolve(val);
//执行失败后执行的回调函数
reject(err);
})
.then( val => { //成功执行promise后执行一下代码,val为resolve中带出的参数
console.log(val)
return new promise(function(resolve,reject){
//doSomething;
//执行成功后执行回调函数
resolve(val);
//执行失败后执行的回调函数
reject(err);
})
})
.then( val => { //但上面then中返回的promise执行完成后执行以下代码
console.log(val) //val为第二个promise执行成功后resolve带出的参数
})
例子3 (promise执行失败后的处理)
new promise(function(resolve,reject){
//doSomething;
//执行失败后执行的回调函数
reject(err);
})
.then( val => { //不会被执行
console.log(val)
}, err => { //promise执行出现错误时执行下面代码
console.log(err) //err为reject带出的错误信息
})
//第二种写法(推荐) --- 该方法得到的错误信息要比上一个会全面一些
new promise(function(resolve,reject){
//doSomething;
//执行失败后抛出错误信息
throw new Error('this is err')
})
.then( val => { //不会被执行
console.log(val)
})
.catch( error => { //promise执行完成后因其内部抛出了错误,会执行下面代码
console.log(error.message) //this is err
})
例子4 (综合)
new promise(function(resolve,reject){
//doSomething;
let val = 'success'
//执行成功后执行的回调函数
resolve(val);
})
.then( val => { //promise成功执行后执行
console.log(val) // ’success'
}, err => { //没出现错误则不会被执行
console.log(err)
})
.then( val => { //执行完上一个then立即执行下面代码
console.log(val) // undefind
return new promise( (resolve, reject) => {
let err = 'this is err';
throw new Error(err);
})
})
.then( val => { //不会被执行
console.log(val)
})
.catch( error => {
console.log(error.message) // 'this is err'
})