如何使用另一个解析状态解析一个Deffered对象。 简单的例子和简单的解释请(看到许多困难的)。
如何使用result
,foo()
和.done(..)
来解决.fail(..)
承诺?
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>
&#13;
答案 0 :(得分:1)
您可以使用$.Deferred
中传递的函数并解决/拒绝从内部延迟:
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>
答案 1 :(得分:0)
您的延迟对象def
是多余的(请参阅Benajmin Gruenbaum给出的链接,为什么它实际上很危险[沉默失败])。解析/拒绝结果对象:
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();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;