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