我有这段代码:
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
。有人可以帮忙吗?
答案 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);
});
});