ES6–promise方法解决回调地狱问题
要解决回调地狱问题,首先要了解回调地狱的产生是由于早期的javascript只支持回调函数来表现异步操作完成,由于业务逻辑复杂时,就会出现一个串联多个异步操作的问题,而且通常需要多次嵌套回调函数,最经典的比如ajax请求,如下面代码:
let oid
function one(){
$.ajax({
//第一个ajax请求,拿到data中的id
url:'http://127.0.0.1:8888/customer/findAll',
method:'get',
success:function(r){
// console.log(r.data[0].id)
oid = r.data[0].id
function two(){
$.ajax({
//第二个ajax请求,将第一个ajax请求拿到的id给第二个ajax
url:'http://127.0.0.1:8888/customer/findCustomerById?id='+oid,
method:'get',
success:function(r){
}
})
}
}
})
}
one()
以上第二个ajax请求需要依赖第一个ajax请求得来的id,这时候就要将第二个ajax套在第一个ajax执行成功的方法里面,如果业务逻辑复杂,一层一层依赖多,就会出现多层嵌套关系,也就形成了多次回调,称为回调地狱。而随着代码量增加,嵌套回调的代码出错调bug困难,维护起来十分痛苦。
于是由社区最早提出并且实现了promise方法用来解决回调地狱问题,最终成为了es6新增promise的范本。
如下代码,想要读取三个txt文本文件的内容,但由于javascript的单线程编程性质,所以读取顺序会不固定
book.readFile("./1.txt",'utf-8',function(error,data){
if(error){
throw error;
}
console.log(data);