使用另一个延迟对象解析jquery延迟对象

时间:2015-05-06 13:35:11

标签: javascript jquery promise jquery-deferred deferred

如何使用另一个解析状态解析一个Deffered对象。 简单的例子和​​简单的解释请(看到许多困难的)。

如何使用resultfoo().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;
&#13;
&#13;

2 个答案:

答案 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给出的链接,为什么它实际上很危险[沉默失败])。解析/拒绝结果对象:

&#13;
&#13;
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;
&#13;
&#13;