Callback与Promise,将setTimeout封装成Promise
- 为什么回调地狱(Callback hell)会发生?
- Promise披着怎样的面纱?
首先Promise的出现,是为了将困在Callback hell中的芸芸众生解救出来,相信回调地狱是JavaScript开发人员最头疼的问题之一吧!尤其在接手前人的代码时,打开看到满满的Callback嵌套,是不是很想递出辞职信;那么Promise是如何解救痛苦中的芸芸众生的呢!
目录
1.回调函数的顺序与回调地狱
2.定时器
3.网络请求
4.Promise
5.sleep函数
回调函数的顺序与回调地狱
我们那火影举例(相信在座的大部分都看过):如果你是卡卡西的话,当敌人太多时就要开写轮眼、写轮眼打开后,快嗝屁之前要使用千鸟、千鸟用完之后必须注意影分身;
下面用伪代码表示就是:
卡卡西.addEventListener('敌人太多', function(){
卡卡西.addEventListener('快嗝屁了',function(){
写轮眼();
卡卡西.addEventListener('写轮眼开完了',function(){
跑路();
})
})
})
以上的举例就是常见的回调地狱了(Callback hell),这也是很多人在办公室处理的事情太多的时候,常常会做到,不知道自己在做什么的原因。
为了不过度嵌套太多的注册事件、回调函数,后来开发者想到了各种的pattern,最后promise被纳入了ES6的标准里;
定时器
定时器是JavaScript中一个很常见的方法,而它的语法和前面的注册事件相当相似
var timeoutID = scope.setTimeout(code[, delay]);
第一个参数正是上面说到的回调函数(Callback),第二个参数则是微秒数;
举一个例子:
假设你的室友是一个很喜欢同时操作很多个session的肥宅,有一天这位肥宅和你说:“诶,十分钟后帮我开一下电脑,我要连回去,拜托!”
setTimeout(() => 开电脑, 10*60*1000);
内置的定时器会在十分钟之后去触发这个事件;
注意:clearSetTimeout(timerId)
可以把定时器事件停止</