【Promise】ES6的promise使用

1、异步编程的一种解决方案;
2、以往异步编程的弊端:

  • 回调地狱:异步编程中的回调函数里又是多层回调函数;回调数据再进行操作,代码会比较乱,不利于维护、查看;

3、promise解决回调地狱:构造函数执行;嵌套的回调函数通过return使用new Promise()

  • resolvethen对应;
  • rejectcatch对应;
  • 也可以直接使用then(resolve,reject)实现这两种效果;
new Promise((resolve,reject)=>{
  setTimeout(()=>{
    resolve()//当我们主动调用then()时用,一般发请求不用写
  },1000)
}).then(()=>{
  console.log('hello')
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      resolve();//reject('err data')
    },1000)
  })
}).then(()=>{
  console.log('js')
}).catch(err=>{})

4、Promise的三种状态:
在这里插入图片描述
5、Promise的写法–链式调用

  • 常规写法:
new Promise((resolve,reject)=>{
	setTimeout(()=>{
		resolve('aaa');
		reject('sss');
	},1000)
}).then(data=>{}).catch(err=>{})
  • 简化版
new Promise((resolve,reject)=>{
	setTimeout(()=>{
		resolve('aaa');
		reject('sss');
	},1000)
}).then(data=>{},err=>{})
  • 当内部回调函数只是为了处理上级数据,不是异步操作时,可以简化;
    • 当请求返回正确时:
new Promise((resolve,reject)=>{
	setTimeout(()=>{
		resolve('11');
	},1000)
})
.then((data)=>{return new Promise((resolve)=>{resolve(data+'aaa')})}).then();
.then((data)=>{return Promise.resolve(data+'aaa')}).then();
.then((data)=>{return data+'aaa'}).then();
  • 当请求返回错误时:
new Promise((resolve,reject)=>{
	setTimeout(()=>{
		resolve('11');
	},1000)
})
.then((data)=>{return new Promise((reject)=>{reject('err')})}).catch(err=>{});
.then((data)=>{return Promise.reject('err')}).catch();
.then((data)=>{throw 'err'}).catch();

6、Promise处理多个请求:

  • 当需要接收多个请求数据后再执行回调函数时使用:Promise.all([可遍历/可迭代=数组]).then(results=>{})
Promise.all([
	new Promise(()=>{}),
	new Promise(()=>{})
	]).then(results=>{
		console.log(results);
	});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值