你如何检测异步couchdb事件的完成?

时间:2014-02-08 06:37:08

标签: javascript jquery ajax couchdb

我在使用jquery couchdb库的promises方面遇到了一些麻烦。

我不确定如何检测加载事件何时结束。这是我的代码:

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()事件何时完成。我无法理解这样做的承诺的语法。 任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

从loadIngredients()返回promise并将方法赋值给done(),如下所示。

所以loadIngedients()创建一个deferred并返回它(作为一个promise),但只有当allDocs()成功函数解析deferred时才会调用promise.done()方法,从而触发'done'警告......

请注意,您可能还希望在loadIngredients()的调用者中处理被拒绝的场景。使用promise的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");
}