将jQuery.Deferred对象传递给deferred.resolve时,jQuery.Deferred是否存在错误? [英] Does jQuery.Deferred have a bug when a jQuery.Deferred object is passed to deferred.resolve?

查看:63
本文介绍了将jQuery.Deferred对象传递给deferred.resolve时,jQuery.Deferred是否存在错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆