通过promise处理回调地狱问题,初级篇
回调地狱问题是什么
不知道各位小朋友,有没有使用过,通过Ajax对接口发起请求,如果使用过肯定遇到过这样的问题,就是ajax请求里再使用ajax请求,然后再使用ajax请求。这样的操作如果使用了多次,会让你的代码特别混乱,让你自己的看不下去你的代码,而且很容易遇到错误。
处理回调地狱问题
ES6新语法的promise就可以解决回调地狱问题,上代码!这里的setTimeOut就仿真异步请求
new Promise((resolve, reject)=>{
console.log('这是第一个数据')
setTimeOut(()=>{
resolve('这是第二个数据')
},1000)
}).then(res=>{
console.log(res);
//如果想要继续回调函数,就需要返回一个新的promise对象
return new Promise((resolve, reject){
resolve('这是第三个数据')
})
}).then(res=>{
console.log(res);
}).catch(err=>{
//此处的catch是获取上面所有的回调函数的异常,不止是最后一个
console.log(err)
})
最后的数据结果就是,先输出“这是第一个数据”,三秒后输出“这是第二个数据”,最后再输出“这是第三个数据”,所以说,通过promise的处理方法,输出的结果是你想要的输出顺序的结果。
处理并发问题
如果需要获取多个请求,可以通过Promise.all()方法来处理,把所有请求到的数据,都放在一个数组中。
Promise.all([
new Promise((resolve, reject)=>{
resolve('这是第一个数据');
}),
new Promise((resolve, reject)=>{
resolve('这是第二个数据');
})
]).then(res=>{
console.log(res); //['这是第一个数据','这是第二个数据']
}).catch(err=>{
console.log(err);
})
这样所有请求到的数据,都加入到你的res中了。