2014-02-08 24 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(“ingredients”).allDocs()事件结束的时间。尽管如此,我仍然无法理解承诺的语法。 任何帮助将非常感激。谢谢。

回答

2

从loadIngredients()返回承诺并将方法分配给done(),如下所示。

因此,loadIngedients()创建一个延迟并返回它(作为承诺),但只有当allDocs()成功函数解析延迟时,才会调用promise.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