gpt4 book ai didi

javascript - 将 jQuery.Deferred 对象传递给 deferred.resolve 时,jQuery.Deferred 是否存在错误?

转载 作者:行者123 更新时间:2023-11-30 21:07:16 27 4
gpt4 key购买 nike

给定使用 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 记录在控制台

给定使用 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() 确实会返回预期结果

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 的 Promisespecification 实现相关的 jQuery 错误? ?

最佳答案

这不是错误,但可能是缺少的功能。 jQuery 从未尝试实现标准的 Promise 构造函数,它的 Deferred 构造函数做了一些完全不同的事情。诚然,如果 resolve 实际上 fulfills,它们肯定会混淆标准术语;然而 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在 jQuery 的 promise 实现中使用它,但从版本 3 开始,这些至少已被修复(can be tested),因此 jQuery promise 实例现在可以与所有其他实现互操作。

关于javascript - 将 jQuery.Deferred 对象传递给 deferred.resolve 时,jQuery.Deferred 是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46492277/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com