我在使用 jquery 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() 事件何时结束。不过,我无法理解 promise 这样做的语法。 任何帮助将不胜感激。谢谢。
最佳答案
从 loadIngredients() 返回 promise 并将方法分配给 done(),如下所示。
因此 loadIngedients() 创建一个延迟并返回它(作为 promise ),但只有当 allDocs() 成功函数解析延迟时,才会调用 promise.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");
}
关于javascript - 您如何检测异步 couchdb 事件的完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642891/