zoukankan      html  css  js  c++  java
  • 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方法,总是处于回调链的尾端,保证抛出任何可能出现的错误

      

         

        

  • 相关阅读:
    网站、博客、文章推荐
    hdu 4000 Fruit Ninja
    2011年 北京区域赛A题 Qin Shi Huang's National Road System // hdu 4081 Qin Shi Huang's National Road System 最优比率生成树
    2008 北京区域赛 Minimal Ratio Tree
    uva 10608 Friends 并查集
    2011 北京区域赛 Hou Yi's secret // hdu 4082
    C/C++中有关字长与平台无关的整数类型(转)
    C/C++中有关字长与平台无关的整数类型(转)
    C# Windows Media Player 控件使用实例 方法(转)
    c# 系统时间
  • 原文地址:https://www.cnblogs.com/qzccl/p/7800426.html
Copyright © 2011-2022 走看看