使用call将此上下文设置为回调函数

时间:2015-08-12 16:16:30

标签: javascript ember.js call bind

我正在尝试理解一种在不使用bind的情况下将此上下文分配给promise的方法。

如果我有以下承诺

Ember.RSVP.Promise.all([
    //THIS REFERS TO AN EMBER OBJECT
    this.store.find('product', this.productSpecifications(null,null,"TRP")),
    this.store.find('product', this.productSpecifications(null,null,"TRF")),
]).then(function (values){
    this.set('recommendedPaid', values[0]);
    this.set('recommendedFree', values[1]);
}.call(this)).catch(function(err){
    console.log('error found in recommended products');
});

当我调用(this)回调函数时,我可以访问js对象,但响应“values”会丢失。

如何使用此方法将上下文设置为Ember Object并传递promise响应

1 个答案:

答案 0 :(得分:0)

我会以经典方式执行此操作,方法是保存对您感兴趣的this的引用:

var self = this;

Ember.RSVP.Promise.all([
    self.store.find('product', self.productSpecifications(null,null,"TRP")),
    self.store.find('product', self.productSpecifications(null,null,"TRF")),
]).then(function (values){
    self.set('recommendedPaid', values[0]);
    self.set('recommendedFree', values[1]);
}.catch(function(err){
    console.log('error found in recommended products');
});