[英]How to immediately resolve or reject jQuery promise?
我不太确定next之间有什么区别:
$(document).ready(function() { function resolveAtOnce() { var d = $.Deferred(); // return d.resolve("Ok 1").promise(); // works return d.resolve("Ok 2"); // works also //d.resolve("Ok 3"); return d.promise(); } resolveAtOnce().done(function(response) { console.log("Resolved with response: '" + response + "'"); }).fail(function(error) { console.log("Resolved with response: '" + error + "'"); }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这三种方法之间有什么区别吗? 一切似乎都正常。 运行示例: https : //jsfiddle.net/u819mv7e/ 。
这些之间有区别吗?
return d.resolve("Ok 1").promise(); // works
这将返回一个已解决的Promise对象。 在接口级别,promise被定义为至少支持.then()
方法的对象。 (这就是为什么这些对象也称为thenable的原因 。)
在jQuery中,由于历史原因.fail()
在没有稳定的标准之前就实现了.fail()
它们还支持.done()
和.fail()
以及其他几个。
return d.resolve("Ok 2"); // works also
这将返回一个已解析的Deferred对象。 延迟是Promise 的超集 ,这意味着它们可以支持jQuery Promise支持的所有相同方法,并且可以将它们视为Promise对象。
Deferred对象和Promise对象之间的区别在于,promise具有固定的状态,该状态在解析后无法更改,但是Deferreds的状态实际上可以更改。
d.resolve("Ok 3");
return d.promise();
这与示例1相同。
那么,您应该使用什么?
使用jQuery延迟时,请始终返回.promise()
,因为它们符合具有不可更改状态的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.