Не удается прочитать свойство 'обещание' из неопределенного

0

У меня есть этот код:

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

3 ответа

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');
}

Что еще более важно, я не понимаю, почему вам нужны обещания. Обещания полезны, когда функция запускает то, что дает результат позже. Например, когда функция запускает анимацию или запрос AJAX, она может вернуть обещание, когда эта анимация /AJAX будет завершена.

option01 не делает ничего длинного (например, анимация или запрос AJAX). Звонки .css вступают в силу немедленно, они выполняются, как только они возвращаются. Поэтому, когда option01 возвращается, он просто выполняется... так что вы можете просто сделать:

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

Я просто не уверен, чего вы пытаетесь достичь здесь. Является ли ваш образец кода достаточно представительным для того, что должны делать эти функции?

0

см. ссылку рабочего примера 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);
});

});
0

Вы ничего не возвращаете из функций, вам нужно вернуть элемент:

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

Но тогда не уверен, что вы ищете здесь, используя promise().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню