angular中promise的then()方法返回的promise对象的状态问题

clipboard.png

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 ?

阅读 6.4k
2 个回答

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

问这个问题表示你没怎么明白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不是鼓励用法,建议不要在这条路上继续走下去

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题