EmberJS:在视图被破坏时承诺回调?

时间:2014-02-27 10:13:35

标签: javascript ember.js

我对承诺有一个小问题。我确定运行循环允许解决我的问题,但它仍然有点模糊我。问题在这里:我有一个组件可以执行一些重的ajax调用,可能需要几秒钟才能完成。当promises解决时,我将数据设置为componnent,以便它可以从中呈现图形。问题是,如果在此期间,用户转换到新页面,则视图(和所有组件)将被销毁,并且当promises解析时,它会尝试设置为尚不存在的对象。繁荣,我有一个“试图设置被破坏的对象错误”。这是在promise解析时调用的方法的一小部分:

updateChart: function(timeframe, interval) {
   var self   = this;
   var method = 'get' + this.get('type').capitalize();

   this.set('isLoading', true);

   this.get('slowService')[method](this.get('project')).then(function(result) {
     Ember.run(function() {
       self.set('isLoading', false);
     });

    self.set('data', result);
 });

},

非常感谢!

1 个答案:

答案 0 :(得分:1)

问题提出已近2年了;但是那天以来发生了很多变化。我只想发一个答案,以便将来看到这个问题的任何人都知道这不再是问题了。

有一个很棒的插件可以用来准确地解决这个问题中提到的那类问题。 ember-concurrency提供了可取消的承诺。 Official documentation页明确地对此问题中总结的案例进行了如下处理:

“ember-concurrency使您能够编写任务,这些操作是绑定到它们所在对象生命周期的异步可取消操作,这意味着当主机对象被销毁时(例如组件未被渲染),任务自动取消。“