1.什么是回调地狱
如下代码:
setTimeout(function () { //第一层
console.log(111);
setTimeout(function () { //第二程
console.log(222);
setTimeout(function () { //第三层
console.log(333);
}, 1000)
}, 2000)
}, 3000)
代码中的回调函数套回调函数,这种回调函数中嵌套回调函数的情况就叫做回调地狱。
2.用Promise解决回调地狱
什么是Promise?
Promise是js中的一个原生对象,是一种异步编程的解决方案,可以替换掉传统的回调函数解决方案。
Promise的三个状态:
1、pending[待定]初始状态
2、fulfilled[实现]操作成功
3、rejected[被否决]操作失败
promise详解:
new Promise(
function (resolve, reject) {
// 一段耗时的异步操作
resolve('成功') // 数据处理完成
// reject('失败') // 数据处理出错
}
).then(
(res) => {console.log(res)}, // 成功
(err) => {console.log(err)} // 失败
)
1.resolve作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
2、.then()返回一个新的Promise实例,所以它可以链式调用
3.错误处理
第一种:
接口有错误返回reject函数
reject(‘错误信息’).then(() => {}, () => {错误处理逻辑})
第二种:
通过catch捕捉错误信息
throw new Error(‘错误信息’).catch( () => {错误处理逻辑})