首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当一个jQuery.Deferred对象被传递给deferred.resolve时,jQuery.Deferred有错误吗?

当一个jQuery.Deferred对象被传递给deferred.resolve时,jQuery.Deferred有错误吗?
EN

Stack Overflow用户
提问于 2017-09-29 15:32:57
回答 1查看 440关注 0票数 1

给出使用Promise构造函数的代码

代码语言:javascript
复制
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的等效代码,jQuery.deferred对象记录在.then(),而不是传递给jQuery.deferred.resolve的值。

代码语言:javascript
复制
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));
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>

虽然将jQuery.deferred承诺对象传递给.then(),但确实返回了预期的结果

代码语言:javascript
复制
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));
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>

该输出是否与jQuery的Promise规格说明实现相关的Promise bug?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-29 17:39:10

这不是一个bug,但它可能是一个缺失的功能。jQuery从未尝试实现标准的Promise构造函数,它的Deferred构造函数做了一些完全不同的事情。诚然,如果resolve确实完成了任务,那么它们肯定会使用标准术语;不过,jQuery的实现确实早于标准,所以这并不令人惊讶。

该输出是否与jQuery的承诺/A+规范的实现相关?

不,允诺/A+规范只涉及then函数的行为,而不是允诺结构。在jQuery的承诺实现中包含了确实有许多固有的问题,但是自从第3版以来,这些已经被修复( 可以测试),因此jQuery承诺实例现在可以与所有其他实现互操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46492277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档