第一种写法会出现回调地狱,第二种写法就不会了,为什么还要用promise

        setTimeout(function () {  //第一层
            console.log('武林要以和为贵');
            setTimeout(function () {  //第二程
                console.log('要讲武德');
                setTimeout(function () {   //第三层
                    console.log('不要搞窝里斗');
                }, 1000)
            }, 2000)
        }, 3000)
 setTimeout(function () {  //第一层
            console.log('武林要以和为贵');
            a()
},3000)
function a(){
     setTimeout(function () {  //第二程
                console.log('要讲武德');
                b()
     }, 2000)
}
function b(){
     setTimeout(function () {  //第二程
                console.log('不要搞窝里斗');
     }, 1000)
}

拿第一段代码为例,定时器是为了模拟网络请求而写的定时器,
可现实开发中 你发送网络请求 并不知道具体的响应时间 是无法写成第二种格式的
不知道你能理解吗.
假设三个请求

axios.get('1') 
axios.get('2') 
axios.get('3') 
你如何按照你写的第二种格式写呢 这三个请求都不确定响应时间,我要依次打印三个结果
那是不是 就要用到promise 之后我们利用.then回调