• js整理4


    异步处理

    错误处理

    • 同步
    function A() {
    	B();
    }
    function B() {
    	C();
    }
    function C() {
      throw new Error('something happend')
    };
    A();
    
    //错误从内向外抛出
    Error: something happend
        at C ...
        at B ...
        at A ...
    
    • 异步
    setTimeout(function A() {
      setTimeout(function B() {
      	setTimeout(function C() {
          throw new Error('something happend')
      	}, 0);
      }, 0);
    }, 0);
    
    //这3个函授都是从事件队列直接运行;运行C时,A和B并不在内存堆栈里;
    Error: something happend
        at C ...
    
    • 记住,只能在回调函数内部处理源于回调的异步错误;

    未捕获异常处理

    • 浏览器:
    window.onerror = function (err) {
      return true;  //彻底忽略所有错误;
    }
    
    • nodejs
    process.on('uncaughtException', function (err){
      console.log(err);   //避免了全部奔溃;
    });
    
    //或者使用domain
    var Domain = require('domain').create();
    
    Domain.run(function () {
      .....
    });
    
    Domain.on('error', function (err) {
      console.log(err);
    });
    

    PubSub(发布订阅)模式

    • 简单的例子
    var PubSub = {
      handlers: {},
      on: function (type, handler) {
        if(!(type in this.handlers)) {
          this.handlers[type] = [];
        }
        this.handlers[type].push(handler);
        return this;
      },
      emit: function (type) {
        var handlerArgs = Array.prototype.slice.call(arguments, 1);
        var handlersTypes = this.handlers[type];
        for(var i = 0; i < handlersTypes.length; i++) {
          handlersTypes[i].apply(this, handlerArgs);
        }
        return this;
      }
    };
    
    • PubSub模式可以用来处理异步事件,但其内在与异步没有关系;事件处理器本身并不知道自己在事件队列中还是在应用代码中运行的;

    Promise和Deferred

    • Promise实例只允许添加多个回调,然后由其他东西来触发;
    • Deferred就是Promise的超集,它比Promise多了一项特性:可以直接触发;resolvereject方法均可以触发Deferred对象;
  • 相关阅读:
    上拉电阻与下拉电阻的总结
    硬件设计中的30个错误想法与原因分析
    转载:个人电子技术经验积累
    最为精辟和实用的按键处理程序
    TM1637驱动程序
    17.TLB
    14.PTD与的基址
    java读写文件及保留指定位小数
    Java堆内存不足
    Ubuntu下创建程序启动器
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/5079925.html
Copyright © 2020-2023  润新知