@Promise测试 Promise区别
四种Promise区别
话不多说,上图
地狱函数:
ajax({
url: url1,
success: function(data) {
ajax({
url: url2,
data: data,
success: function(data) {
ajax({
url: url3,
data: data,
success: function() {
}
});
}
});
}
});
先为大家简单的介绍一下Promise()这个其实就是为了解决地狱函数的问题,为了避免一直在函数内嵌套函数,使得效率大大的变慢,也增加了代码的冗余。好的,接着来看这四个区别:
问题一:
问题1,其实是比较常见的用法,就是在then的响应函数里返回另外一个Promise实例,先执行doSomething,然后执行doSomethingElse函数,最后把return返回的放到finalHandler函数的参数中去执行。
问题二:
问题2,讲述的就是在then里面执行一个匿名函数,但是在这个函数里并没有return,那就是后面的then中不需要等到前面一个函数执行完再运行,所以两者是同步的关系,所以执行的顺序就如之前的图上的属性执行,这个也是好理解的。
问题三:
问题3,我们传入了一个函数,但是这个函数是直接执行的方式传入,所以这里传进去的是一个Promise实例,第一个doSomething和第二个doSomethingElse几乎是同时执行的,因为这两者都是在同一个栈内执行,所以看作一起执行,然后在doSomethingElse中返回的是一个Promise实例,而不是一个函数,在promise规范的定义中,这个then会被忽视掉,所以finakHandle监听的是doSomething,当doSomething执行完之后,finalHandler就开始执行。这里是比较难的一点。
问题四:
问题4,就比较好判断了,then里面接收两个函数作为参数,一个是fulfiled和rejected,那他这边的顺序就是先执行doSomethingElse和resultOfDoSomethingElse。
看完这些,都学会了吗?