Asyncjs

javaScript异步编程

笔记

Recommand:

  • CodeSchool JQuery
  • MDN for Question
  • Stack Overflow

代码样式

  1. 缩进为2 空格
  2. 驼峰式命名
  3. 末尾使用分号,除函数定义
  4. 当且仅当调用链中的两个函数调用返回同一对象时才使用相同缩进
    $('h1)
        .first()
        .addClass('first)
    .end()
        .last()
        .addClass('last')

事件调度

回调函数(setTimeout...),运行回调时,我们称已触发某事件

    for(var i = 1; i <= 3; i ++){
        setTimeout(function(){console.log(i);}, 0);
    }//outprint 4, 4, 4
    /*
    调用setTimeout时会有延时事件入队列
    而后后面的代码依照顺序运行
    当没有任何代码
    javascript虚拟机查看队列里面有什么东西
    若有如setTimeout函数,则调用此事件处理器处理
    事件处理器返回后,又回到队列
    即触发的每个事件都会位于堆栈轨迹的底部
    */  

我的想法是在一系列的onload啊什么代码依次进行的时候就不断地将事件添加到队列中,当我们的其余代码比如赋值进行完之后,依次看是否队列中当前的这个元素时候被触发,若被触发则调用他的处理器,若没有则一直在队列中

setTimeout,setInterval为不精确的计时工具 触发频率低 若需要细粒度的计时,可使用process.nextTick\requestAnimationFrame(P9)

间或异步的函数(有时异步有时不)

jQuery同名函数($)可用于延迟函数,若DOM早已结束加载,则不存在任何延迟,$回调会立即触发
这部分没看懂P12


异步递归和回调存储P14 :(

异步递归在等待任务完成期间可触发延时的次数是不受限的
避免异步递归

异步错误的处理

function JSONToObject(jsonStr) {
  return JSON.parse(jsonStr);
}
var obj = JSONToObject('{');
/*
javascript抛出异常若没有被捕获,会提供有用的堆栈轨迹
在此例中 堆栈轨迹通知我们哪抛出了错误同时最初出错的地方
undefined:1
{
SyntaxError: Unexpected end of input
    at Object.parse (native)
    at JSONToObject (/Users/cz/Desktop/code/EventModel/stacktrace.js:10:15)
    at Object.<anonymous> (/Users/cz/Desktop/code/EventModel/stacktrace.js:12:11)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:139:18)
    at node.js:974:3
*/

回调中抛出的错误

利用try/catch语句块并不能捕获从异步回调中抛出的错误

特例为该异步函数确实为同步做某些事且容易出错
eg. Node的fs.watch(file, callback)

var fs = require('fs');
fs.readFile('fhgwgdz.txt', function(err, data) {
  if (err) {
    return console.error(err);
  };
  console.log(data.toString('utf8'));
});
/*
Nodejs中的回调几乎接受一个错误作为其首个参数,这样就允许回调自己来决定如何处理这个错误
*/

fs读取一个文件,当读取完了之后队列中没有别的东西,则调用callback然后传入err和data,再根据具体err进行动作,Ajax对成败各定义单独的回调

$.get('/data', {
    success: successHandler;
    failure: failureHandler;
});

未捕获异常的处理

若异常从未被捕获

  1. 在浏览器环境中
  2. Nodejs环境中若有未被捕获的错误则关停,可通过
    定义domain对象的错误处理器,从而throw只是触发了其错误处理器
var myDomain = require('domain').create();
myDomain.run(function() {
  setTimeout(function() {
    throw new Error('Listen to me!')
  }, 50);
});
myDomain.on('error', function(err) {
  console.log('Error ignored!');
});

不管在浏览器端还是服务器,全局的异常处理器都应只在调试时使用

分布式事件

PubSub模式

link.onclick = clickHandler

link.onclick = function() { clickHandler1.apply(this, arguments); clickHandler2.apply(this, arguments); }

冗长重复->jQuery抽象为bind方法

$(link) .bind('click', clickHandler1) .bind('click', clickHandler2)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    程序员poetry阅读 113,833评论 24 450
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,097评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,285评论 0 2
  • 五十三:请解释 JavaScript 中 this 是如何工作的。1.方法调用模式当一个函数被保存为一个对象的属性...
    Arno_z阅读 518评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139