javascript - angular中promise的then()方法返回的promise对象的状态问题
高洛峰
高洛峰 2017-04-11 11:12:21
[JavaScript讨论组]

angular中的promise对象的then()方法返回一个新的promise对象,用于进行链式调用。但是无论是调用defer.resolve()还是defer.reject(),那么var a=promise.then()方法执行了之后,返回的这个对象a,它的status始终都是1,也就是如果再使用这个a.then(fn1,fn2),它就始终都是执行fn1。

是不是promise.then()调用之后,不管是resolve还是reject,then()返回的新的promise对象的status的值始终都是1 ?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
PHPz

我觉得 在success或error没有再对defer.resolve()或者defer.reject(),应该都会只执行then的第一个参数函数

PHP中文网

问这个问题表示你没怎么明白Promise到底是如何工作的,以及怎么才是正确的使用方法。

先解决你a.then(fn1,fn2),它就始终都是执行fn1的问题,这个现象的关键在于,你之前已经给了promise两个回调,如下:

var a = promise.then(function(result) {}, function(error) {} );

注意里面的第二个回调function(error) {},里面什么都没做,表达了这样一个意思:“当错误发生时,忽略其错,并进入后面的链”。这就是为什么你下面的链中,永远都是alert(1)被调用了。要改也简单,把alert前移,然后去掉后一次的then,如下:

var a = promise.then(function(result) { alert(1); }, function(error) { alert(1); } );

还有,defer不是鼓励用法,建议不要在这条路上继续走下去

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

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