用另一个延迟对象解析 jquery 个延迟对象
Resolve jquery deferred object with another deferred object
如何用另一个的解析状态来解析一个延迟对象。
请简单的例子和简单的解释(看到了很多困难的)。
如何在没有 .done(..)
和 .fail(..)
的情况下使用 foo()
解决 result
承诺?
var result = $.Deferred();
/**
* @returns {Deferred}
*/
var foo = function() {
// ... something that returns deferred object at random moment of time
};
foo()
.done(function(){result.resolve()})
.fail(function(){result.reject()})
;
setTimeout(function() {
result.reject();
}, 50);
setTimeout(function(){
console.log('Result is:', result.state());
}, 100);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
您可以使用传入 $.Deferred
和 resolve/reject 从内部延迟的函数:
var result = $.Deferred(function() {
Math.random() > 0.5 ? this.resolve() : this.reject();
});
setTimeout(function(){
document.write('Result is: ' + result.state());
}, 100);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
您的 Deferred 对象 def
是多余的(请参阅 Benajmin Gruenbaum 给出的链接,为什么它实际上很危险 [silent fails])。 Resolve/reject 结果对象:
var result = $.Deferred();
var foo = function() {
return Math.random() > 0.5 ? result.resolve() : result.reject();
};
setTimeout(function(){
document.write('Result is:', result.state());
}, 500);
foo();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
如何用另一个的解析状态来解析一个延迟对象。 请简单的例子和简单的解释(看到了很多困难的)。
如何在没有 .done(..)
和 .fail(..)
的情况下使用 foo()
解决 result
承诺?
var result = $.Deferred();
/**
* @returns {Deferred}
*/
var foo = function() {
// ... something that returns deferred object at random moment of time
};
foo()
.done(function(){result.resolve()})
.fail(function(){result.reject()})
;
setTimeout(function() {
result.reject();
}, 50);
setTimeout(function(){
console.log('Result is:', result.state());
}, 100);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
您可以使用传入 $.Deferred
和 resolve/reject 从内部延迟的函数:
var result = $.Deferred(function() {
Math.random() > 0.5 ? this.resolve() : this.reject();
});
setTimeout(function(){
document.write('Result is: ' + result.state());
}, 100);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
您的 Deferred 对象 def
是多余的(请参阅 Benajmin Gruenbaum 给出的链接,为什么它实际上很危险 [silent fails])。 Resolve/reject 结果对象:
var result = $.Deferred();
var foo = function() {
return Math.random() > 0.5 ? result.resolve() : result.reject();
};
setTimeout(function(){
document.write('Result is:', result.state());
}, 500);
foo();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>