用另一个延迟对象解析 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>