javascript - 如果Promise对象reject自身
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-14 10:53:56
[JavaScript讨论组]

代码:

            var der = {};

            var p = new Promise(function (resolve, reject) {
                der.reject = reject;
            })
            p.then((v) => {
                console.log('resolve');
                console.log(v);
            })
            p.catch(function (v) {
                console.log(v);
                console.log('reject');
                console.log(v);
            });

            der.reject(p);
            console.log(p);

火狐下只输出reject,chrome下正常输入,然后会出现Uncaught (in promise)

请问,为什么会出现未捕获的异常呢,p的catch明明定义了,而且为什么火狐下只输出reject,输出p的操作都无效果(实则应该也是出现异常未捕获导致)


补充:
出现未捕获的异常的原因是,虽然then中没定义第二个函数,但是仍然是运行then,并且将据因和状态传递给返回的新的Promise对象,返回的Promise对象没有catch回调,所以报出了异常
但是firefox中输出p无效果的原因仍然不清楚

女神的闺蜜爱上我
女神的闺蜜爱上我

全部回复(2)
伊谢尔伦
var der = {};

var p = new Promise(function (resolve, reject) {
    der.reject = reject;
})
// 下面修改成这个样子,因为then内部的处理函数也需要异常捕获
p.then((v) => {
    console.log('resolve');
    console.log(v);
}).catch(function (v) {
    console.log(v);
    console.log('reject');
    console.log(v);
});

der.reject(p);
console.log(p);
欧阳克

Promise相当于一个标准,符合标准的这种原型都可以称为promise,在标准之外的特性不同浏览器可能不一样,很显然,火狐认为.catch和.then可以分别声明,然后在运行时响应,也就是你上边提到的没报错;而谷歌则认为.catch要连同.then中的异常一同处理,所以需要作用在.then之后的promise上。你将.then().catch连用,谷歌就不会报错。深层次的原因也有可能一个是基于事件,一个是基于轮询导致的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号