前端异步流程工具之一:Promise原理

首先javascript语言是一门“单线程”的语言

Promise是es6新增的一种异步编程的一种解决方案,它可以用来取Callback(回调函数)和event;

Promise的用法:在new一个Promise函数的时候,Promise必须接受一个函数对象作为参数;
在函数对象里又有两个参数,一个表示成功,一个表示失败

 const P1 = new Promise (function( resolve, reject ){});

且内部有状态机制(pending,resolved,rejected)。
代表(进行中,成功(解决),失败(未解决)) 同时 我们要知道 它的状态一旦确定,是不可改变的。

  1. promise原型下面两个常用的方法:
    1. Promise.prototype.then
    2. Promise.prototype.catch
//then
const p1 = new Promise ( function ( resolve, reject ) {
   resolve( '任务一' )
 })
  .then ( function ( data ) {
    console.log( data )
  })
//catch:相当于一种then的语法糖
//ps:语法糖(Syntactic sugar),也译为糖衣语法,指计算机语言中添加的某种语法,通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
  1. promise静态方法
    1. Promise.all()
      用于将多个 Promise 实例,包装成一个新的 Promise 实例,接受一个数组作为参数,只有数组里面的每个状态都变成resolve,则新的Promise 实例状态才会变成resolve.
    2. Promise.race()
      它和Promise.all方法有些类似。Promise.all方法是谁跑的慢,以谁为准执行回调,Promise.race相反,是谁跑的快,以谁为准执行回调。
const p1 = new Promise ( function ( resolve, reject ) {
   resolve( '任务一' )
 })
  .then ( function ( data ) {
    console.log( data )
  })

 const p2 = new Promise ( function ( resolve, reject ) {
   setTimeout( function () {
     resolve( '任务二' )
   },1000)
 })
  .then ( function ( data ) {
    console.log( data )
  })
  
 Promise 
   .all([p1,p2])     // 先执行all中所有任务, 执行完成之后再去执行后面的任务
   .then( data => {
     console.log( '任务3' )
   })
Promise
   .race([p1,p2])  // race  谁快输出谁
   .then( data => {
     console.log( '任务3' )
   })

then可以链式调用,也是这一点让Promise十分好用;
大家知道 jQuery 实现链式调用是return了一个this,但Promise不行!
因为then函数内返回的是一个新的Promise对象。
标准中规定:
then 方法必须返回一个新的 Promise实例;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值