小张和promise

promise 简介

  • promise是es6新加入的异步编程解决方案,解决js地狱回调的问题
  • 常规写法
new Promise(请求1)
	.then(请求2(请求结果1)
	.catch(处理异常(异常信息))

语法

var p=new Promise(function(resolve,reject){...});//executor
p.then(()=>{})//成功resolve
.catch(()=>{});//失败reject

构造函数

Promise构造executor函数,resolve和reject两个函数作为参数传递给executor(executor函数在promise构造函数返回所建的promise实例对象前被调用)。resolve和reject函数被调用的时候,promise的状态改成fulfilled或者rejected。
executor函数内部会执行异步操作,当操作执行完毕,(操作成功的话)调用resolve函数将promise状态改为fulfilled,(操作失败)调用reject函数将promise状态改为rejected。如果在executor函数中抛出了一个错误,promise状态改为rejected。executor的函数的返回值会被忽略

promise的三种状态

pending:初始状态/等待状态,既不是成功也不是失败
fulfilled:操作成功
rejected:操作失败

promise的方法

Promise.all(iterable)
该方法返回一个新的promise对象。
一般情况下,该方法会接受一个iterable参数,里面是一个promise列表,当所有的promise都出发成功才会触发成功,一旦一个失败,会立刻停止其他promise执行。当iterable执行成功了,新的promise对象会将所有的结果以数组形式依次返回。当有一个失败,会返回失败信息。
Promise.all()简单实现
点我!
Promise.race(iterable)

  • 当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的响应句柄,并返回该promise对象
  • 说白了就是,多个Promise同时执行,返回最先执行结束的Promise任务的结果,无论成功or失败
    Promise.reject(rease)
    返回一个状态为失败的Promise对象,并将给定的失败信息传递给相应的处理方法
    Promise.resolve(value)
    返回一个状态由value决定的Promise对象
  • 如果该值是thenable(即带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定,采用它的最终状态
  • 否则的话(该value为空,基本类型或者不带他很方法的对象),返回的Promise对象状态为fulfilled,并将该值传递给then方法。
  • 如果传入的value本身就是一个Promise对象,则该对象作为Promise.resolve方法的返回值返回
console.log(Promise.resolve(123));
//Promise{<fulfilled>:123}

Promise.prototype.then
Promise.prototype.catch

异步封装promise

表现形式[promise1,promise2,3]–>promise1–>promise2–>3

function packPromise(arr){
    let key=null;
    for(let p of arr){
        key=p.then(key);
    }
    return key.then();
}

Promise的使用总结

  1. 首先初始化一个Promise对象,可以通过两种方式创建,这两种方式都会返回一个Promise对象
  • new Promise§
  • Promise.resolve§
  1. 然后调用上一步返回的Promise对象的then方法,注册回调函数
  2. 注册catch异常处理函数,处理前面回调中可能抛出的异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值