将jQuery.Deferred对象传递给deferred.resolve时,jQuery.Deferred是否存在错误? [英] Does jQuery.Deferred have a bug when a jQuery.Deferred object is passed to deferred.resolve?
问题描述
使用Promise
构造函数提供代码
let promise = () => new Promise(resolve => resolve(1));
new Promise((resolve, reject) => {
setTimeout(() => reject("10 seconds exceeded"), 10000);
resolve(promise())
})
.then(data => console.log(data))
.catch(err => console.error(err));
1
记录在console
使用 jQuery.Deferred 给出等效代码. .then()
,而不是传递给jQuery.deferred.resolve
Given the equivalent code using jQuery.Deferred the jQuery.deferred
object is logged at .then()
, not the value passed to jQuery.deferred.resolve
let promise = () => new $.Deferred(dfd => dfd.resolve(1));
new $.Deferred(dfd => {
setTimeout(() => dfd.reject("10 seconds exceeded"), 10000);
dfd.resolve(promise());
})
.then(data => console.log(data))
.fail(err => console.error(err));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
尽管将jQuery.deferred
许诺对象传递给.then()
确实会返回预期结果
though passing jQuery.deferred
promise object to .then()
does return expected result
let promise = () => new $.Deferred(dfd => dfd.resolve(1));
new $.Deferred(dfd => {
setTimeout(() => dfd.reject("10 seconds exceeded"), 10000);
promise().then(data => dfd.resolve(data));
})
.then(data => console.log(data))
.fail(err => console.error(err));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
输出是否是与jQuery的Promise
实现和规范相关的jQuery错误?
Is the output a jQuery bug relevant to jQuery's implementation of Promise
and the specification?
推荐答案
这不是bug,但可能是缺少的功能. jQuery从未尝试过实现标准的Promise
构造函数,而它的Deferred
构造函数却做了完全不同的事情.诚然,如果resolve
实际上满足,则它们肯定会与标准术语混淆;再次,但是jQuery的实现确实早于该标准,因此不足为奇.
It's not a bug, but it might be a missing feature. jQuery never attempted to implement the standard Promise
constructor, and its Deferred
constructor does something quite different. Admittedly, if resolve
actually fulfills, they definitely mess with the standard terminology; again however jQuery's implementation does predate the standard so it's not surprising.
输出是否与jQuery的Promise/A +规范实现相关的jQuery错误?
Is the output a jQuery bug relevant to jQuery's implementation of the Promise/A+ specification?
否,Promise/A +规范仅与then
函数的行为有关,与promise构造无关.在jQuery的promise实现中确实存在确实存在许多内在问题,但是至少从版本3开始,这些问题已得到修复(可以进行测试),因此jQuery promise实例现在可以与所有其他实现互操作.
No, the Promise/A+ specification is only concerned with the behaviour of the then
function, not the promise construction. There were indeed many inherent problems with that in jQuery's promise implementation, but since version 3 those have been fixed at least (which can be tested), so jQuery promise instances are now interoperable with all other implementations.
这篇关于将jQuery.Deferred对象传递给deferred.resolve时,jQuery.Deferred是否存在错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!