Asnow. 2022-07-22 14:23 采纳率: 100%
浏览 39
已结题

这个控制台输出什么?有没有谁能解释下为什么

var a = new Promise(function (res, rej) {
    rej(8);
});
a.then(
    function (val) {
        console.log(val + 2);
        return val + 1;
    },
    function (val) {
        console.log(val + 2);
        return val + 1;
    }
).catch(function (error) {
    console.log(error);
});
a.finally(function () {
    console.log("bb");
}).catch(function (d) {
    console.log(d);
});

这个控制台输出什么?有没有谁能解释下为什么
而且上图和下图的输出竟然不一样,实在懵了

var a = new Promise(function (res, rej) {
    rej(8);
}).then(
    function (val) {
        console.log(val + 2);
        return val + 1;
    },
    function (val) {
        console.log(val + 2);
        return val + 1;
    }
).catch(function (error) {
    console.log(error);
});
a.finally(function () {
    console.log("bb");
}).catch(function (d) {
    console.log(d);
});
  • 写回答

2条回答 默认 最新

  • 汤卓杰 2022-07-22 15:10
    关注

    图一

    let a = new Promise((rew, rej) => {
        rej(1);
    })
    a.then(
        val => {
            console.log(1);
        }, val => {
            console.log(2);//2
        }).catch(res => {
        console.log(3);
    })
    a.finally(res => {
        console.log(4);//4
    }).catch(res => {
        console.log(5);//5
    })
    

    Promise有两种写法:

    • new Promise().then(f1,f2);表示,成功时调用f1,失败时调用f2
    • new Promise().then(f1).catch(f2);表示,成功调用f1,失败调用f2
    • new Promise().then(f1,f2).catch(f3);你的写法,同时写的话,后面的catch里的回调方法不生效

    图二

    let a = new Promise((rew, rej) => {
        rej(1);
    }).then(
        val => {
            console.log(1);
        }, val => {
            console.log(2);//2
        }).catch(res => {
        console.log(3);
    })
    a.finally(res => {
        console.log(4);//4
    }).catch(res => {
        console.log(5);
    })
    
    • 同理,catch()已经绑定输出2,后面再输出3的方法不生效,
    • 图一,promise:a是调用了2次,第一次:1没进,2生效,3不生效,第二次:重新绑定的回调函数,不受影响
    • 图二,promise:a在声明的时候就已经确定了:成功为1,失败为2,3不生效,在调用方法的时候,catch输出5也不生效。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月30日
  • 已采纳回答 7月22日
  • 修改了问题 7月22日
  • 创建了问题 7月22日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?