当 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 的等效代码,jQuery.deferred
对象记录在 .then()
,而不是传递给 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
promise 对象传递给 .then()
确实 return 预期结果
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
和 specification 的实现相关的 jQuery 错误?
这不是错误,但可能是缺少的功能。 jQuery 从未尝试实现标准的 Promise
构造函数,它的 Deferred
构造函数做了一些完全不同的事情。诚然,如果 resolve
实际上 满足 ,它们肯定会混淆标准术语;然而 jQuery 的实施确实早于标准,所以这并不奇怪。
Is the output a jQuery bug relevant to jQuery's implementation of the Promise/A+ specification?
不,Promise/A+ 规范只关注 then
函数的行为,而不关注 promise 构造。有 were indeed many inherent problems with that in jQuery's promise implementation, but since version 3 those have been fixed at least (which ),所以 jQuery promise 实例现在可以与所有其他实现互操作。
给定代码使用 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 的等效代码,jQuery.deferred
对象记录在 .then()
,而不是传递给 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
promise 对象传递给 .then()
确实 return 预期结果
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
和 specification 的实现相关的 jQuery 错误?
这不是错误,但可能是缺少的功能。 jQuery 从未尝试实现标准的 Promise
构造函数,它的 Deferred
构造函数做了一些完全不同的事情。诚然,如果 resolve
实际上 满足 ,它们肯定会混淆标准术语;然而 jQuery 的实施确实早于标准,所以这并不奇怪。
Is the output a jQuery bug relevant to jQuery's implementation of the Promise/A+ specification?
不,Promise/A+ 规范只关注 then
函数的行为,而不关注 promise 构造。有 were indeed many inherent problems with that in jQuery's promise implementation, but since version 3 those have been fixed at least (which