繁体   English   中英

如何立即解决或拒绝jQuery Promise?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM