Promise函数的详解

Javascript执行环境是单线程的,也就是说JS环境中负责解释和执行的线程只有一个,一次只能完成一项任务,这个任务执行完后才能执行下一个,因此Javascript中存在大量的异步操作和回调函数。

Promise函数是异步编程的一个解决方案,相对传统的解决方案,他更合理和强大。Promise的本意是“承诺”、“许诺”的意思。承诺在未来会执行某个操作的函数,就是Promise函数。其基本结构如下:

var promise = new Promise(function(resove, reject){
  // ...你的代码
  if (/*异步成功*/){
    resove(value);
  } else{
    reject(error);
  }
});

Promise的状态

Promise对象的状态有3个,分别是pending(进行中)、fulfilled(已完成)、rejected(已失败)。Promise对象一旦进入了某一个状态,就不会再转成其他状态了(主要是后面两种状态,fulfilled和rejected)。如一旦调用了resolve函数,就是fulfilled的状态,就不会再调用reject函数了。

pending:等待状态,比如正在进行网络请求,或者定时器没有到时间。

fulfilled:满足状态,当我们回调了resolve函数时,就处于该状态。

rejected:拒绝状态,当我们回调了reject函数时,就处于该状态。

let p = new Promise((resolve, reject) => {
	let a1 = '成功的参数';
	let a2 = '失败的参数';
	var time = setTimeout(() => {
		console.log('start');
		resolve(a1);
		reject(a2);
		console.log('end');
	}, 1000);
});

p.then(value => {
	console.log('这是resolve函数体,参数:' + value);
}, reason => {
	console.log('这是reject函数体,参数:' + reason);
})

其输出结果为:

 

.then()函数和.catch()

.then()函数和.catch()都需要Promise对象才能调用,再使用这两个函数的时候,需要注意的地方如下:

1、then函数中,可以编写resolve函数体和reject函数体,也可以只编写resolve函数体。即参数可以为.then(resolve=>{},reject=>{})或.then(resolve=>{}) 这两种。

2、resolve函数返回的是Promise对象,哪怕使用 return ‘bbb’;这样的显式返回,最后也会转成Promise对象返回出去。也可以人工显式指定返回,如以下所示。新返回的Promise对象可以再跟then函数,一直跟下去。如果没有return这条语句,则默认返回对象的参数是undefinded,即res为undefined。

3、reject返回的是空,或者说无返回。因为无返回,故后面跟then或catch函数无意义,也不会执行。

4、多次调用Promise.then()函数,原理一致。传入的数据永远是调用对象的数据。

5、catch函数。该函数有两个作用,一个是等同于then(null,reject=>{});一个是捕获resolve中的异常。

 

Promise对象的all()

All()函数,顾名思义,就是等所有的对象都成功了(相等于 state1==fulfilled&&state2==fulfilled),才能运行resolve函数。

 

Promise对象的race()函数

Race()函数,就是谁先完成,就按照谁的指令,进入相应的函数。

 

以上是学习Promise函数时的一些体会,不一定准确,愿对你有些价值。

  • 14
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值