js整理4
2015-12-27 13:21
585 查看
异步处理
错误处理
同步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多了一项特性:可以直接触发;
resolve和
reject方法均可以触发
Deferred对象;
相关文章推荐
- JS_数据类型之null,undefined,date(),typeConvert..
- hiho 23 最短路径 一(Dijstra)
- 输入框 js正则推断输入
- 延时加载JavaScript代码提高速度
- js作用域、异步——学习笔记
- 关于json中null的问题
- javascript冒泡排序
- js执行顺序——学习笔记
- javascript linkedlist data structures
- js获取url传递参数
- 三种方法实现js跨域访问
- 理解和使用 JavaScript 中的回调函数
- JSON入门(1)
- JavaScript的removeChild()函数用法详解
- 获得树形json串
- JavaScript构造函数详解
- 【转】页面加载等待页面JS
- js追加事件执行代码场景
- JavaScript生成二维码图片小结
- 良好的异常展现界面<500.jsp>