У меня есть этот код:
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);
});
Я пытаюсь достичь некоторой зависимости от обещаний, но в отношении этого кода у меня есть ошибка, которая: Uncaught TypeError: Cannot read property 'promise' of undefined
. Может ли кто-нибудь помочь?
Это не имеет никакого смысла.
Прежде всего, .promise()
- это метод объекта jQuery, но option01
не возвращает объект jQuery (на самом деле он ничего не возвращает). Если вы хотите, чтобы option01
возвращал $el
, просто выполните это:
option01 : function($el){
$el.css('color', 'red');
return $el;
}
Или, поскольку .css
является цепным:
option01 : function($el){
return $el.css('color', 'red');
}
Что еще более важно, я не понимаю, почему вам нужны обещания. Обещания полезны, когда функция запускает то, что дает результат позже. Например, когда функция запускает анимацию или запрос AJAX, она может вернуть обещание, когда эта анимация /AJAX будет завершена.
option01
не делает ничего длинного (например, анимация или запрос AJAX). Звонки .css
вступают в силу немедленно, они выполняются, как только они возвращаются. Поэтому, когда option01
возвращается, он просто выполняется... так что вы можете просто сделать:
someFunction.option01(my_div);
someFunction.option02(my_div);
Я просто не уверен, чего вы пытаетесь достичь здесь. Является ли ваш образец кода достаточно представительным для того, что должны делать эти функции?
см. ссылку рабочего примера Plunker
в селекторе произошла ошибка, так как строка не закрыта. Возможно, это была опечатка.
return statement отсутствует>
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);
});
});
Вы ничего не возвращаете из функций, вам нужно вернуть элемент:
var someFunction = {
option01 : function($el){
return $el.css('color', 'red');
},
option02 : function($el){
return $el.css('background-color', 'blue');
}
}
Но тогда не уверен, что вы ищете здесь, используя promise()
.