账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于promise.catch的一点疑惑
    37
    0

    一个promise对象,不管之前是resolve还是reject, 只要后面被catch了, 之后的状态就变成resolved是吗? 不是说promise只要状态确定了就不会改变了莫?

        let p1 = new Promise((resolve, reject) => {
            reject('123');
        }) 
        p1最后的状态是rejected,
        
        let p2 = new Promise((resolve, reject) => {
            reject('123');
        }).catch(e => e);
        p2最后的状态是resolved
        

    为什么被catch了之后,状态就变了呢,

    补充: 今天看到了一个关于promise.all的问题,就翻了下文档,看到文档上的一个例子

        const  p1=  new  Promise((resolve ,  reject)  => {
            resolve('hello');
        }).then(result  =>  result);
    
        const  p2=  new  Promise((resolve ,  reject)  => {
            reject('world');
        }).then(result  =>  result);
    
        Promise.all([p1, p2]).then(res =>  console.log(res)).catch(e => console.log(e));
        
    这个是正常的, 毕竟p2最终状态为rejected,而promise.all里面的子元素只要有一个状态为rejected, 那么就会成为rejected, 执行catch的操作。
        
        但是如果在p2的后面加上catch
         const  p2=  new  Promise((resolve ,  reject)  => {
            reject('world');
        }).then(result  =>  result).catch(e => e);
        
        那么上面的promise.all就会走then, 而不执行catch。 文档上面写的是 p2有自己的catch方法,该实例执行完catch就会变成resolved,两个子元素都为resolved,所以执行then。
    为什么加了catch 状态就变了呢
        
    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 中国好骚年° 普通会员 1楼

      Promise有一个方法叫做catch,用于处理Promise的错误。这个方法接受两个参数:一个错误对象,另一个是你想要在错误发生时执行的回调函数。

      如果你在catch中直接使用.then或.catch,那么这个错误对象会被传递给catch函数。如果你希望在catch中对错误进行特定的处理,你可以返回一个新的Promise。这个新的Promise会包含你在catch函数中抛出的错误。

      下面是一个例子:

      ```javascript let promise = new Promise((resolve, reject) => { // 在这里做你的异步操作 // 然后在这个Promise的 catch 中处理错误 reject(new Error('An error occurred')); });

      let rejectedPromise = promise.catch((error) => { // 在这里处理错误 console.log(error); });

      rejectedPromise.then((result) => { console.log(result); }); ```

      在这个例子中,我们首先创建了一个新的Promise。然后在catch中,我们捕获这个错误并打印出来。最后,我们使用.then来处理处理错误的结果。

      注意,Promise的catch方法接受两个参数:一个错误对象,另一个是你想要在错误发生时执行的回调函数。这个错误对象是Promise的状态。如果Promise还没有被解决,那么错误对象的属性应该是undefined。如果你在catch中抛出了一个错误,那么错误对象的属性应该是错误本身。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部