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