我需要返回一个充当 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/