2014-02-08 3 views
1

У меня проблемы с обещаниями с использованием библиотеки jquery couchdb.Как вы обнаруживаете завершение асинхронного события couchdb?

Я не уверен, как определить, когда событие загрузки закончилось. Вот мой код:

var ingredients; 
    function loadIngredients() { 
     try { 
      var deferred = $.Deferred(); 
      $.couch.db("ingredients").allDocs({ 
       success: function (result) { 
        ingredients = result; 
        deferred.resolve(); 
        return deferred.promise(); 
       } 
      }); 
     } 
     catch (err) { 
      alert(err.message + " loadingredients"); 
      deferred.reject(); 
     } 
    } 

    try 
    { 
     var promise = loadIngredients(); 
     promise.done(function(){(alert("done"))}); 
    } 
    catch (err) { 
     alert(err.message + " execution"); 
    } 

Я немного жареных на данный момент, так что я прошу прощения, если это не имеет смысла.

Мне просто нужно знать, как определить, когда завершилось событие $ .couch.db ("components"). Событие allDocs() завершено. Я не могу разглядеть синтаксис обещания сделать это. Любая помощь была бы высоко оценена. Спасибо.

ответ

2

Возвратите обещание от loadIngredients() и назначьте метод done(), как показано ниже.

Так loadIngedients() создает отложенный и возвращает его (как обещание), но только тогда, когда функция успеха allDocs() разрешает отложенную функцию, вызывается метод method.done(), запуская предупреждение «done». .

Обратите внимание, что вы также захотите обработать отклоненный сценарий в вызывающем объекте loadIngredients(). Используйте метод fail() с обещанием сделать это. Вы можете просто связать его с методом done(), если это необходимо, как показано ниже:

var ingredients; 

function loadIngredients() { 
    var deferred = $.Deferred(); 

    try { 
     $.couch.db("ingredients").allDocs({ 
      success: function (result) { 
       ingredients = result; 
       deferred.resolve(); 
      } 
     }); 
    } 
    catch (err) { 
     alert(err.message + " loadingredients"); 
     deferred.reject(); 
    } 
    return deferred.promise(); 
} 

try 
{ 
    var promise = loadIngredients() 
    promise.done(function(){(alert("done"))}).fail(function() { alert('FAIL!'); }); 
} 
catch (err) { 
    alert(err.message + " execution"); 
} 
+0

Вы - святой. Спасибо. У меня было ощущение, что я был близок :) – DrBoon

+0

Нет проблем, рад, что это полезно. – jwwishart

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