• es6 学习笔记4


    1、proxy

      用于修改默写操作的默认行为,可以对外界的访问进行过滤和改写

      new proxy(target, handler); target参数表示索要拦截的目标对象,handler参数也是一个对象,用来定制拦截行为。

      拦截的部分操作:

      (1)get(target,propKey,recever);拦截对象属性的读取,比如proxy.foo和proxy['foo']

      (2)set(target,propKey,value,recever);拦截对象属性的设置,比如proxy.foo=v或者procy['foo']=v,返回一个布尔值

      (3)apply(target, object, args);拦截proxy实例作为函数调用的操作,比如proxy(...args)proxy.call(object, ...args)proxy.apply(...)

      (4)construct(target, args);拦截 Proxy 实例作为构造函数调用的操作,比如new proxy(...args)

     2、promise

      <1>这个函数有两个特点: (1)对象的状态不受外界影(2)一旦状态改变,就不会在变,任何时候都可以得到这个结果(即也叫做已定型)

      <2>promise构造函数接收一个函数作为参数,该函数的两个参数分别是resolve和reject. 

    var promise = new Promise(functioin(resolve, reject) {
          if(/*异步操作成功*/)  {
                 resolve(value) 
           }else {
                 reject(error)
           }
    });

      (1)resolve函数的作用是,将promise对象的状态从未完成变成成功,在异步操作成功时调用,作为参数传递出去

      (2)reject函数的作用是,将promise对象的状态从未完成变成失败,在异步操作失败的时调用,并将一步操作报出的错误,作为参数传递出去

      一般来说,调用resolve或者reject以后,Promise的使命就完成了,后继的操作应该放到then里面,不可以直接写在resolve和reject的后面,所以,最好是在resolve和reject的前面加上return语句,这样就不会有意外。

      <3>实例生成之后,可以用then方法分别指定resolved状态和rejected状态的回调函数    

    promise.then(function(value){
       // 成功
    },function(error) {
       // 失败
    })

      PS:<3>的使用没有<4>的好

      <4>.catch方法是.then(null, rejection)的别名用于指定发生错误时的回调函数。    

    promise.then(function(value) {
    
    }).catch(function(error) {
        
    })    

      如果catch前面有多个then的话,任何一个抛出错误都会被catch捕获,所以一般不会在then里面定义reject状态的回调函数,都是使用catch方法

      <5>promise的内部错误不会影响到promise外部的代码

      <6>node有一个unhandledRejection事件,专门监听未捕获的reject错误,但是,node有计划在未来废除unhandledRejection事件,如果promiase内部有位不多的错误,会直接终止进程,并且进程的退出吗不为0

      <7>.all用户将多个实例包装成一个新的promise实例,Promise.all方法接收一个数组做为参数,也可以不是数组,但必须是Iterator接口,且返回的每个成员都是Promiase实例 

    let promiseAll = Promise.all([p1,p2,p3])

          promiseAll的状态由p1,p2,p3决定,分成两种情况:

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

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

      <8>.finally()用于指定不管promise对象最后的状态如何,都会执行的操作。它接受一个普通对调函数作为参数

      <9>.done()不管then方法或catch方法结尾,要是最后一个方法炮竹错误,都有可能无法捕捉到,因此,我们可以提供一个done方法,总是处于回调链的尾端,保证抛出任何可能出现的错误

      

         

        

  • 相关阅读:
    沧海桑田,看风险评估在这十五年间的变化与演进
    安全建设从扁鹊三兄弟,到程咬金的三板斧
    基于主动防御能力,建设安全运营体系的一点思考
    如果身处企业高管的位子,你会关心哪些安全问题?
    springsecurity授权
    oracle java api
    oracle知识点
    fastdfs客户端上传和下载文件
    fastdfs知识点
    rabbitmq项目案例
  • 原文地址:https://www.cnblogs.com/qzccl/p/7800426.html
Copyright © 2020-2023  润新知