nextel
@nextel
ненавижу javascript

Как вернуть значение из вложенной функции?

Здравствуйте, есть функция

class ShowReaders
  constructor:(@listreaderdiv, @currentreaderdiv )->
       console.log('mainclass')
       @currentReader
       @testedReaders

...
...



  getCurrentReader:(url)->
       $.post "/ajax/#{url}", (data)->
            console.log('data ',data['current'])
            @currentReader = data['current']



  create:->
       @getCurrentReader('getcurrentreader')
       $('#currentreader').empty()
       console.log( @currentReader)

Вопрос вот в чемпочему при прсвоении значнеия перменной currentReader в методе getCurrentReader переменная номально присваивается а при вызове в методе create он уже взвращает undefine я понимаю что поле класса надо как то прокинуть видимо во вложенную функцию только никак не соображу как эт сделать
  • Вопрос задан
  • 2352 просмотра
Решения вопроса 1
А вы давно занимаетесь асинхронным программированием или только сегодня начали?
Потому как вам нужно как минимум вот это (простите не силен в coffescript, написал как мог):

class ShowReaders
  constructor:(@listreaderdiv, @currentreaderdiv )->
       console.log('mainclass')
       @currentReader
       @testedReaders

...
...



  getCurrentReader:(url, callback)->
       $.post "/ajax/#{url}", (data)->
            console.log('data ',data['current'])
            @currentReader = data['current']
            @onGetCurrentReader()

  create:->
       @getCurrentReader('getcurrentreader')

  onGetCurrntReader:->
      $('#currentreader').empty()
      console.log( @currentReader)


Мне наиболее логичным кажется следующий вариант:

function ShowReaders() {
  this.currentReader = null;
  this.testedReaders = null;
}

ShowReaders.prototype.getCurrentReader = function(url, callback) {
  $.post(url, this.onGetCurrentReader.bind(this, callback));
};

ShowReaders.prototype.onGetCurrentReader = function(callback) {
  this.currentReader = data['current'];
  callback();
};

ShowReaders.prototype.create = function() {
  this.getCurrentReader('getcurrentreader', function() {
    $('#currentreader').empty();
    console.log(this.currentReader)
  }.bind(this));
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы