Promise

三种状态

  • pending:进行中
  • fulfilled:已成功
  • rejected:已失败
    只能从pending到fulfilled或者pending到rejected
    一旦状态改变,就不会再变,任何时候都可以得到这个结果。

基本用法

创造了一个Promise实例
resolve:是一个函数,将Promise对象的状态从“未完成”变为“成功”
reject:也是函数,将Promise对象的状态从“未完成”变为“失败”

const promise=new Promise((resolve,reject)=>{
               if (/*操作成功*/) {
               	resolve(value)
               } else {
               	reject(error)
               }
		 	});

then方法

promise.then(function(value) {
  //状态变成fulfilled的回调
}, function(error) {
  // 状态变成reject的回调,可有可无
});

箭头函数形式

promise.then((value)=>{
		 	},
		 	(value)=>{
});

实例

 function timeout(ms){
		 	return new Promise((resolve,reject)=>{
		 		setTimeout(resolve,ms,'done')
		 	})
		 }
		 timeout(100).then((value)=>{
            console.log(value)//done
		 })

timeout采用了函数的尾调用,不懂的可以去http://es6.ruanyifeng.com/#docs/function#尾调用优化查看
timeout 返回一个promise实例,在100ms后状态从pending变成resolved,输出done这个值
Promise 新建后就会立即执行。

参数

resolve:Promise 实例/数值
reject:错误实例

resolve参数例子

 const one=new Promise((resolve,reject)=>{

 })
 const two=new Promise((resolve,reject)=>{
		  resolve(one)
})

调用resolve或reject以后,Promise 的使命就完成了,后继操作应该放到then方法里面
所以应该在resolve前面加上return
return resolve()

Promise.prototype.then()

then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数

Promise.prototype.catch()

用于指定发生错误时的回调函数

p.then((val) => console.log('fulfilled:', val))
  .catch((err) => console.log('rejected', err));

Promise.prototype.finally()

不管promise最后的状态,在执行完then或catch指定的回调函数以后,都会执行finally方法指定的回调函数

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

Promise.all()

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
const p = Promise.all([p1, p2, p3]);
p1,p2,p3都是promise实例

p的状态由p1、p2、p3决定
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

// 生成一个Promise对象的数组
const promises = [2, 3, 5, 7, 11, 13].map(function (id) {
  return getJSON('/post/' + id + ".json");
});

Promise.all(promises).then(function (posts) {
  // ...
}).catch(function(reason){
  // ...
});

Promise.race()

Promise.race方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.race([p1, p2, p3]);

只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值