无法阅读财产'承诺'未定义的

时间:2014-05-10 11:24:18

标签: javascript jquery promise

我有这段代码:

var someFunction = {
    option01 : function($el){
      $el.css('color', 'red');   
    },
    option02 : function($el){
      $el.css('background-color', 'blue');
    }    
}

var my_div = $('.my_div');

someFunction.option01(my_div).promise().done(function() {
    console.log('option01 done');

    someFunction.option02(my_div);
});

我正在尝试达到一些promise依赖,但是对于这段代码我有一个错误,即:Uncaught TypeError: Cannot read property 'promise' of undefined。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

这没有任何意义。

首先,.promise()是jQuery对象的一种方法,但是option01没有返回一个jQuery对象(事实上,它并没有返回任何东西)。如果您希望option01返回$el,请执行以下操作:

option01 : function($el){
  $el.css('color', 'red');
  return $el;
}

或者,因为.css是可链接的:

option01 : function($el){
  return $el.css('color', 'red');
}

更重要的是,我不明白为什么你需要承诺 。当一个函数启动一些产生以后的结果时,Promise很有用。例如,当函数启动动画或AJAX请求时,它可以返回完成动画/ AJAX完成时的承诺。

option01不会长时间运行(例如动画或AJAX请求)。 .css来电会立即生效,一旦他们返回,他们就会完成。因此,当option01返回时,它只是已完成 ...所以您可以这样做:

someFunction.option01(my_div);
someFunction.option02(my_div);

我只是不确定你在这里想要实现的目标。您的示例代码是否足以代表这些函数应该实际执行的操作?

答案 1 :(得分:0)

您没有从函数返回任何内容,您需要返回元素:

var someFunction = {
    option01 : function($el){
      return $el.css('color', 'red');   
    },
    option02 : function($el){
      return $el.css('background-color', 'blue');
    }    
}

但是后来不确定你在寻找什么,使用promise()

答案 2 :(得分:0)

请在下面找到工作Plunker示例的链接

选择器出错,因为字符串未关闭。可能是错字。
缺少退货声明>
var my_div = $('。my_div');

http://plnkr.co/edit/3OJRF2wviNnX63jeH3aH?p=preview

var someFunction = {
  option01: function($el) {
   return $el.css('color', 'red'); 
  },
  option02: function($el) {
  return $el.css('color', 'blue');  

  }
}


$(function(){
var my_div = $('.my_div');

someFunction.option01(my_div).promise().done(function() {
    someFunction.option02(my_div);
});

});