promise的基本使用——为什么推荐使用catch

255 阅读1分钟

promise的推荐使用

以下为推荐的catch使用方式,这种对比与直接用then使用两个回调,catch还可以捕获前面then方法执行中的错误

//案例1
let promise = new Promise((resolve, reject)=>{
    resolve('成功');
    reject("拒绝了");   
});
promise.then((value)=>{
    console.log( value)
}).catch((error)=>{
    console.log(error )
})

输出为成功,因为状态一旦改变,就不会再变了,需要注意then方法和catch方法返回的都是一个新的Promise对象

注意点: catch 是如何都能捕获到之前的promise里的错误呢

catch实际上捕获的是then方法里返回的promise,只是案例1中then返回的promise对象的状态为fulfilled,使用catch并没有触发,假设我们改成案例2

//案例2
let promise = new Promise((resolve, reject)=>{

    resolve('成功');
    reject("拒绝了");
   
});
promise.then((value)=>{
    // 报错:x is not defined
    console.log( value+x)
}).catch((error)=>{
    console.log(error )
})

输出为ReferenceError: x is not defined 这是因为catch本身捕获的就是then中的错误,接下来再看案例3

let promise = new Promise((resolve, reject)=>{
   
    reject("拒绝了");
   
});
promise.then((value)=>{
    console.log( value)
}).catch((error)=>{
    console.log(error )
})

输出 拒绝了;此时因为promise的状态变为了rejected,then方法相当于被跳过了,catch也就捕获到了promise,并执行