2017-03-12 jude
介绍 Promise 实现的文章早已烂大街了,大多数文章先解读 Promise/A+ 标准,然后用一行行代码实现标准。能用代码实现标准是件了不起的事,但我很讨厌这样,那些文章我都没能读完。 既然读者来看实现,就可以假设他们都已熟悉 Promise 的使用方法。能不能换个角度,从使用出发,逐步实现一个简单可用的 Promise 呢? 继续阅读 »
2017-03-08 Oliver Wang
偶然看到一篇介绍 Promise 的文章,这个概念也出现好久了,之前一直用着 whenjs, 但是一直没有时间自己写一个。 于是下定决心,自己写一个吧~ 毕竟别人都能写出来的东西,而且工作的时候都是在写一些业务型的代码,感觉非常没有创造性~ Promise 用起来挺简单的,可以很好的解决 js callback 多的时候,缩进很烦的问题。而且线性的写代码也更容易理解~ 现在写这篇文章,就是高中的时候写作文一样,看到题目就开始辗转反侧,脑子里面想好多内容,理清了思路,但是拿起笔就全忘了。 今天在开始写之前我也下了好大的决心,在代码上面写了大片的注释,感觉写这一篇应该会很顺利吧,结果还是事与愿违,写了些乱七八糟的东西。 这篇文 继续阅读 »
2015-04-16 Alex Sun
一直以来,对promise也只是有所耳闻,但是并未有过深入的学习和理解。昨天看到了这篇文章,又想到ES6中都提供原生Promise了,因此很有必要深入理解下。 继续阅读 »
2016-04-16 jude
声明 文中的 promisify 函数原型出自 月影 的这篇博客。 了解Promise 继续阅读 »
2014-03-22 W.Y.
童鞋们,请准备好迎接 Web 开发历史上一个重大时刻。。。 [鼓声响起] JavaScript 有了原生的 Promise! [漫天的烟花绽放,人群沸腾了] 这时候你大概是这三种人之一: - 你的身边拥挤着欢呼的人群,但是你却不在其中,甚至你还不大清楚“Promise”是什么。你耸耸肩,烟花的碎屑在你的身边落下。不过不要担心,我也是花了多年的时间才明白 Promise 的意义,你可以从这里开始。 - 你一挥拳!太赞了对么!你已经用过一些 Promise 的库,但是所有这些第三方实现在 API 上都略有差异,JavaScript 官方的 API 会是什么样子?请看这里! - 你早就知道了,看着那些欢呼雀跃的新人你的嘴角泛起一丝 继续阅读 »
2014-03-25 W.Y.
在凌乱的异步编程一文中,我们见识了用回调处理异步调用的尴尬局面,即使是一组简单的函数调用。 快速回顾一下,看看我们最初的代码,使用回调函数时的凌乱结果,以及我们为了回到正途而想要解决的几个问题: 我们再也不能使用简单的“调用 - 返回”(call-and-return)编程模型 我们再也不能使用 try/catch/finally 来处理异常 我们必须为可能执行异步操作的每个函数的签名增加 callback 和 errback 参数 1. Promises 一个 Promise(或者叫 Future, Delayed value, Deferred value)代表一个尚不可用的值,因为产生这个值的计算过程尚未完成。一个 Pr 继续阅读 »
2014-03-25 W.Y.
在 JavaScript 中处理异步和回调就是家常便饭,我们通常会面对这样一些问题: 1. 如何优雅滴组织我们的回调代码 2. 对异步函数错误处理的最佳实践是什么 3. 异步嵌套问题 4. 怎样使我们的代码可读性和可维护性更高 Programs are meant to be read by humans and only incidentally for computers to execute. 程序是给人读的,只是顺带让计算机执行一下。 ——《编写可维护的JavaScript》@Donald Knuth 当然,最常见也是最简单的处理方式就是,直接将回调函数或错误处理函数作为异步函数的参数,在异步函数返回时进行相应的调用,这 继续阅读 »
2014-03-25 W.Y.
正如我们在凌乱的异步编程一文中看到的那样,基于回调函数的异步代码的错误处理也很快变得混乱起来,丢失了许多同步代码具有的优秀品质,使我们更难定位到错误原因。在用 Promises 简化异步编程一文中,我们介绍了 Promises,看到了它如何使我们回到“调用 - 返回”编程模型,允许异步错误像同步错误那样沿着调用堆栈向上传播,并提供一种更清晰方法来管理异步,特别是在处理错误时。 1. Try/catch/finally 在同步代码中,try/catch/finally 提供了一种简单友好但非常强大的惯用语法来执行任务、处理错误,并且总是确保稍后可以执行清理。 译注:idiom 习语 下面是一个简单的 try/catch/fin 继续阅读 »
2017-02-12 Lim Geng
最近在网上看到有部分人在面试(比如1月面试记)的时候被问到了LazyMan,而且网友也有不同的实现方式。这里我用两种方式实现了lazyman,以供参考,如有更好的方法,欢迎留言。 队列 这种方式,每次都是往queue里添加执行函数,next函数用来决定什么时候调用下一个函数。 ``js var LazyMan = function LazyMan (name) { if (!(this instanceof LazyMan)) return new LazyMan(name); this.queue = [() => { console.log(hello ${name}`); 继续阅读 »
2014-03-25 W.Y.
1. 异常和 try/catch 当执行可能失败的操作时,采用异常机制和 try/catch 是一种直观的方式,这样我们就可以从异常中恢复,或将异常抛出,异常沿着调用堆栈到达调用者,调用者可以处理该异常或将其继续抛出。 看一个简单的例子: ```javascript function thisMightFail() { //... if(badThingsHappened) { throw new Error(...); } return theGoodResult; } function recoverFromFailure(e) { //... return re 继续阅读 »