JavaScript(ES6)—Promise对象

1.promise前言

1.什么是js的同步和异步?

 答:js是单线程的 ====》一条流水线
     同步异步的差别在于这条流水线上各个流程的执行顺序不同;
     同步:按照主线程中程序排队的顺序,来一个个执行,  前一个执行完才会执行后一个; 
     异步:主线程中的某些程序任务,可先不执行放在队列中,而去执行下个任务;   

  如:定时器可放在队列中,等后面执行好后,再回头去执行;

简单理解为:改变程序正常执行顺序的操作就为异步操作;

2.常见的异步执行有:定时器、ajax请求等;

异步不是js同时做两件事情,js是单线程的:
只是一个任务未结束,先不执行,而去执行下一个内容;
ajax请求可以与js代码同时进行,因为ajax请求不由js引擎负责,而由浏览器模块负责;

3.为什么要用异步?
因为若在执行中有定时器或ajax请求等任务,若不用异步,
则它执行完需要等一定的时间,才能继续执行后面内容;会卡在页面上,很不友好。

4.如何实现异步?
回调函数、promise对象、生成器等。。。。。

(回调函数包括了定时器和ajax请求) 

2.promise对象介绍

1.promise是什么?
    promise是一种异步编程模式;(是一种写代码的方式)
    Promise是一个构造函数,用来生成promise实例

2.promise的作用?
    promise可以实现异步执行;
    有了Promise对象,可以将异步操作以同步的流程表达出来,使代码看起来清晰,直观。
    避免了传统回调函数中层层嵌套的回调函数(俗称'回调地狱');
    
3.如何使用promise的介绍:
  promise对象的3个状态
      *pending:初始化状态
      *fullfilled:成功状态 
      *rejected:失败状态 

4.使用promise基本步骤(2步):
  (1)创建promise对象p ,
       传进来一个函数作为参数,函数中也传两个参数
   
    let p=new Promise((resolve,reject)=>{
   	      //初始化实例p状态为pending;
   	      //执行异步操作 
   	    if(、、、条件、、){
   	    	resolve(value);    //修改实例p的状态为fullfilled
   	    }                     //value为传值
   	    else{
   	    	reject(errMsg);    //修改实例p的转态为rejected
   	    }                      //errMsg为传值
     })
   
   (2).调用p的then()
    then中传两个回到函数作为参数
                               
       p.then(()=>{
         .... 	        //若p执行了resolve(),状态为fullfilled,则执行这里代码
       	},()=>{                  
          .... 	        //若p执行了reject(),状态为rejected,则执行这里代码
        })
    
5.解释代码: 
   *创建promise对象p中:
      1.构造函数接受一个函数作为参数
      2.调用构造函数的到实例p的同时,作为参数的函数会立即执行
      3.参数函数接受两个回调函数作为参数resolve和reject
      4.在参数函数被执行的过程中,
             如果在其内部调用resolve,会将p的状态变成fullfilled,
             或者调用reject,会将p的状态变成rejected;
   
  *调用promise的then() 
     1.调用.then可以为实例p注册两种状态回调函数
     2.当实例p的状态为fullfilled,会触发第一个函数执行,
     3.当实例p的状态为rejected,会触发第二个函数执行;



.then用于为promise对象的状态注册回调函数。
     它会返回一个promise对象,所以可以进行链式调用也就是.then后面可以继续.then。
     在注册的状态回调函数中,  可以通过return语句改变.then返回的promise对象的状态,
     以及向后面.then注册的状态回调传递数据;也可以不使用return语句,
     那样默认就是将返回的promise对象resolve。

.catch用于注册rejected状态的回调函数,同时该回调也是程序出错的回调,
    即如果前面的程序运行过程中出错,也会进入执行该回调函数。
     同.then一样,也会返回新的promise对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值