2015-02-02 2 views
0

В основном у меня есть различные контроллеры javascript. Базовый HTML-документ Вызывает объект javascript, который вызывает другой, который вызывает вызов Ajax и возвращает объект «Отложен». Затем я вызываю .done по возврату данных и обрабатываю их. Когда я его обрабатываю, я проверяю, содержит ли данные ошибку. Я хочу, чтобы иметь возможность возвращать истину или ложь, полностью поддерживая цепочку, в базовый HTML-документ, чтобы выполнить некоторое поведение пользовательского интерфейса, но я совершенно новичок в идее отсрочки/обещания. Как видно из примера кода на последнем уровне. Я просто возвращаю def.done (AfterServerSuccess) и возвращаюсь обратно на базу, чтобы заполнить containsError. Кажется, это возвращает пустой объект «Отложенный». Я чувствую, что есть простой ответ на этот вопрос. Я пробовал разные способы, чтобы исключить логическое из готового метода, но я не могу понять это. Может кто-нибудь, пожалуйста, дайте мне несколько рекомендаций здесь?Получение возвращаемого значения из Deferred.Done

база:

var containError = `myJavascriptController.CheckItemsForErrors(dayparts, false);` 

MyJavascriptController.js:

var CheckItemsForErrors = function (list, source) 
     { 
      return mySelectionController.CheckForErrors("CheckForErrors", list, source); 
     }; 

mySelectionController.js:

var CheckForErrors= function (listItems, source) 
     { 


      if (listItems.length > 1) 
      { 
          //Ajax call returns Deferred object 
       var def = _manager.SendDataToServer(listItems); 

        return def.done(AfterServerSuccess) 
} 

var AfterServerSuccess = function (data) 
     { 
      _.each(data, function (item) 
      { 
       if (item.Error == true) 
       { 
        return true; 
       } 

      }); 

      return false; 
     }; 

ответ

1

Я бы рекомендовал кое-что прочитать о обещаниях и отложенных объектах. This - хороший ресурс для начала работы.

В принципе, вам нужно сделать функцию CheckForErrors возвратом отложенного объекта/обещания, которое будет разрешено результатом функции AfterServerSuccess. Затем на верхнем уровне, вы можете написать что-то вроде этого, чтобы получить результат ошибки:

var containError = false; 
myJavascriptController.CheckItemsForErrors(listItems, source) 
    .done(function (result) { 
     containError = result; 
     // Do other stuff here... 
    }); 

Работа назад из этого небольшого фрагмента кода, и вы получите почувствовать, как обещает/отложенные объекты работают.

Смежные вопросы