jquery - 使用 jQuery 中的自定义方法返回 promise

标签 jquery jquery-deferred

我需要返回一个充当 promise 的自定义 js 对象,即,当延迟解决或拒绝时,我可以附加回调或错误回调。我需要在这个对象中使用一些自定义方法,只有当它本身不是“挂起”时才能运行。类似于:

foo = $.Deferred();

foo.a_method = function() {
    // do something only if "this" is resolved or rejected
    // throw an exception instead
};

return foo.promise();

上面的代码不起作用,返回的promise没有a_method,而只有jQuery默认的promise方法。我现在的想法是:

var myMixin = {
    a_method: function() {
        // ...
    }
};

return $.extend(foo.promise(), myMixin);

该代码按预期工作,但它对于每个人来说并不常见(至少我认为),并且它不是很容易理解。

我想要它的原因是我有一个依赖于一些加入的ajax请求的库($.when($.ajax('foo'), $.ajax('bar'))) 以便更好地执行。所以我做 请求,附加一些其他回调并使用“特定于域”的方法返回该链的 promise 。

有更好的方法吗?

最佳答案

Promise 对象与 Deferred 对象不同。在 Deferred 对象上调用 promise() 会创建一个新的 Promise 对象。由于您已将函数添加到 Deferred 对象,因此它们不会出现在 Promise 中。因此,您需要将它们添加到 Promise 对象本身。

在您的 $.extend 调用中,您正是这样做的。不过,正如你所说,语法有点困难。因此,您可以使用上面的简单语法:

foo = $.Deferred().promise(); // store the promise object

foo.a_method = function() { // add the property to the Promise object
    // do something only if "this" is resolved or rejected
    // throw an exception instead
};

return foo; // return the Promise object

关于jquery - 使用 jQuery 中的自定义方法返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324166/

相关文章:

javascript - 使用数组中的 div 作为 jquery 对象

javascript - 如何将 jQuery 的延迟对象与自定义 javascript 对象一起使用?

jQuery Deferred - 等待多个 AJAX 请求完成

javascript - Nester在循环中延迟了Ajax调用

jquery - 在 JQuery.Deferred 对象之间传播事件

javascript - ClearInterval 无法正常工作

JQuery 鼠标悬停问题

javascript - 滚动时所有博客文章都应该淡入淡出,除了第一篇

php - 将 PHP 和 JSON 编码转换为 Javascript 日期

javascript - 带有旧回调的新 $.Deferred 对象