在还没有Promise的时候,我们在处理一个异步请求时,通常都是在回调函数中处理的,例如我们处理一个Ajax请求的代码是这样写的:
$.ajax({ url: 'testUrl', success: function() { // 回调函数 } });
假设在一个行为中,需要执行多个异步请求,每一个请求又需要依赖上一个请求的结果,按照回调函数的处理方法,代码如下:
// 第一个请求 $.ajax({ url:'url1', success: function() { //第二个请求 $.ajax({ url: 'url2', success: function() { //第三个请求 $.ajax({ url: 'url3', success: function() { //第四个请求 $.ajax({ url: 'url4', success: function() { //成功地回调 } }) } }) } }) } })
其实,一个行为可以产生若干个异步请求,10个、甚至100个都是可能的。
这就会导致代码嵌套太深,引发“回调地狱”。
“回调地狱”不是什么好事,因为它存在以下几个问题:
1.代码比较臃肿,可读性差。我们程序员写代码有个原则就是,尽量去写可读性强的代码。
2.代码耦合度高,不利于维护,也难以复用。
3.回调函数都是匿名函数,不方便调试。
解决异步编程中“回调地狱”问题的方案是:Promise。