Fork me on GitHub
  2012年11月17日
摘要: 在之前介绍的方法中,无论是消息驱动还是Promise,都无法摆脱“回调”这个东西。习惯了命令式编程的我们似乎很难接受回调,因为它的执行顺序和代码编写顺序并不一致。而JavaScript中的回调之所以会有这么多话题值得讨论,我想一方面是因为它有一张长得像Java的脸,而同时却又有如此多的异步特性。反观像Erlang, F#那样生来就是异步的语言,似乎反而没这么多话题好讨论的。异步就要回调吗?这是个问题,习惯了JavaScript中的异步似乎这个问题的答案是肯定的,但Wind.js却扭转了这一点。在同步、阻塞的环境下,我们写下如下代码123str = readFile('...') 阅读全文
posted @ 2012-11-17 10:02 【艾伦】 阅读(3188) 评论(0) 推荐(4) 编辑
摘要: 先举一个例子,如果希望ABCDE这5个函数依次执行,我们可以写出如下代码。A();B();C();D();E();在同步的情况下,这样的代码没有任何问题。但如果ABCDE都是异步的,还需要按次序执行,这样写就不行了。通常我们会为异步函数设置回调,当函数执行完的时候执行回调,例如A(function(){ B(function(){ C(function(){ D(function(){ E(); }); }); });});毫无疑问这样的编程体验是很差的。当异步流复杂的时候回调嵌套... 阅读全文
posted @ 2012-11-17 10:01 【艾伦】 阅读(987) 评论(0) 推荐(3) 编辑
摘要: Promises是一种异步编程模型,通过一组API来规范化异步操作,这样也能够让异步操作的流程控制更加容易。这里谈的是Promises/A,算是Promises的一个分支吧,其实就是根据Promises模型定义了一组API。由于Promises对于新手而言理解曲线还是比较陡峭的,这里循序渐进的给大家介绍,同时实现一个最简单的Promises/A代码。Promises/A有个别名叫做“thenable”,就是“可以then”的。这里一个promise有三种状态:[默认、完成、失败],初始创建的时候是默认状态,状态只可以从默认变成完成,或者默认变成失败。一旦完成或者失败,状态就不能再变。为了简化文 阅读全文
posted @ 2012-11-17 10:01 【艾伦】 阅读(2227) 评论(0) 推荐(3) 编辑
摘要: JavaScript中有大量异步操作,首先可以看看JS中什么东西会产生异步(这里先只考虑浏览器里的情况):Ajax(XMLHttpRequest)Image Tag,Script Tag,iframe(原理类似)setTimeout/setIntervalCSS3 Transition/AnimationpostMessageWeb WorkersWeb Socketsand more…实际上在我自己的理解中,任何“在未来不确定的时间发生”的事情都可以理解为异步,因此各种DOM事件也可以用类似的方式去理解和处理。异步是JS中的重要话题,Ajax和Node.JS出现以后更是让JS中的异步编程提升 阅读全文
posted @ 2012-11-17 09:55 【艾伦】 阅读(1255) 评论(0) 推荐(5) 编辑