Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – 无法取消$interval返回的链式承诺大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我使用$interval创建一个promise,它是可取消的
见: http://jsbin.com/jeweke/2/

timer = $interval(intervalFunc,intervalDelay,10);
timer.then(
  function(res) {Console.log('ok',res);},function(err) {Console.log('err',err);}
);

但是,如果我将承诺链接起来,则返回的承诺不可取消.
见:http://jsbin.com/jeweke/1/

timer = $interval(intervalFunc,10)
.then(
  function(res) {Console.log('ok',err);}
);

是什么赋予了?这是它应该如何工作吗?

注意 – 此处的示例从http://jsfiddle.net/ExpertSystem/fZc3W/开始大量改编

解决方法

是因为来自$interval的promise链的结果没有包含interval id($$intervalId)的属性.第一种情况是保存具有$intervalId的计时器保证,在第二种情况下,您保存从链返回的保证,这是一个没有$intervalId属性的原始q保证(这是在存储保证的承诺上添加自定义属性)当你调用$interval(…)时各自的seTinterval的id.当你取消定时器时,它需要$intervalId来取消取消,并拒绝相应的定时器保证.

这就是interval.cancel的作用

interval.cancel = function(promisE) {
      if (promise && promise.$$intervalId in intervals) {
        intervals[promise.$$intervalId].reject('canceled');
        clearInterval(promise.$$intervalId);
        deletE intervals[promise.$$intervalId];
        return true;
      }
      return false;
    };

注意这一行: –

if (promise && promise.$$intervalId in intervals) {

interval只是intervalId及其各自promise的映射(例如: – {1:promiSEOfInterval1,2:promiSEOfInterval2}),所以没有intervalId就不会发生取消.所以简而言之,$interval返回的promise是q promise plus $intervalId属性,当你完全链接它时,它只是$q实现,它返回一个新的延迟对象的promise.

大佬总结

以上是大佬教程为你收集整理的angularjs – 无法取消$interval返回的链式承诺全部内容,希望文章能够帮你解决angularjs – 无法取消$interval返回的链式承诺所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。