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

      

         

        

  • 相关阅读:
    RESTful API 设计指南
    理解RESTful架构
    VS2012打开Web项目提示《ASP.NET 4.X 尚未在Web服务器上注册。你需要手动将...》解决方案
    css样式float造成的浮动“塌陷”问题的解决办法
    WebBrowser控件默认使用IE9,IE10的方法
    强制IE浏览器或WebBrowser控件使用指定版本显示网页
    C# 模拟键盘操作--SendKey(),SendKeys()
    《深入理解 OpenStack Neutron》- 发展和虚拟化
    极客时间 《mysql实战45讲》
    mysql 三大块 事务 索引 锁
  • 原文地址:https://www.cnblogs.com/qzccl/p/7800426.html
Copyright © 2011-2022 走看看