Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将jQuery.Deferred对象传递给Deferred.resolve时,jQuery.Deferred是否存在错误?_Javascript_Jquery_Promise_Jquery Deferred - Fatal编程技术网

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

Javascript 将jQuery.Deferred对象传递给Deferred.resolve时,jQuery.Deferred是否存在错误?,javascript,jquery,promise,jquery-deferred,Javascript,Jquery,Promise,Jquery Deferred,给定使用Promise构造函数的代码 let promise=()=>new promise(解析=>resolve(1)); 新承诺((解决、拒绝)=>{ 设置超时(()=>拒绝(“超过10秒”),10000; 解析(promise()) }) .then(数据=>console.log(数据)) .catch(err=>console.error(err))这不是一个bug,但可能是缺少的功能。jQuery从未尝试实现标准的Promise构造函数,它的延迟的构造函数做了一些完全不同的事情。

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

let promise=()=>new promise(解析=>resolve(1));
新承诺((解决、拒绝)=>{
设置超时(()=>拒绝(“超过10秒”),10000;
解析(promise())
})
.then(数据=>console.log(数据))

.catch(err=>console.error(err))这不是一个bug,但可能是缺少的功能。jQuery从未尝试实现标准的
Promise
构造函数,它的
延迟的
构造函数做了一些完全不同的事情。诚然,如果
resolve
确实实现了,那么它们肯定会弄乱标准术语;然而,jQuery的实现确实早于该标准,所以这并不奇怪

输出是否与jQuery实现Promise/a+规范相关


不,Promise/A+规范只涉及
then
函数的行为,而不是Promise构造。在jQuery的promise实现中没有这样的问题,但自从第3版以来,这些问题已经得到了解决(这一点),因此jQuery promise实例现在可以与所有其他实现进行互操作。

jQuery从未实现过
promise
您使用的是哪个版本的jQuery?为什么您都要解决和拒绝这个承诺?立即的
resolve
总是会赢。你能尝试传递jQuery承诺而不是jQuery延期吗?@Bergi stacksnippets使用的jQuery版本是3.2.1,尽管2x返回相同的结果results@guest271314这只是意味着类似于
Promise.resolve(jQuery.Deferred(…)。然后(x=>Promise.resolve())的东西
开箱即用,这使得删除jQuery并使用适当的实现变得很容易。我知道您无法解释jQuery实现决定实现或不实现某个功能的原因,尽管您有任何迹象表明jQuery作者和贡献者知道
Promise
模式和
jQuery.Deferred()
模式之间的显著区别吗?“否,Promise/A+规范仅与
then
函数的行为有关”不是
。then()
期望
Promise
的值可用,而不是
Promise
对象本身?也就是说,
jQuery.deferred.then
实现是否符合规范?当然,
jQuery.deferred.then
的结果与使用与本机
相同模式的输出不一致。then()
@guest271314 Yes,每个人都知道延迟构造函数模式和承诺构造函数模式之间的显著差异(并且
resolve
不解决但实现只是另一种模式),但我不知道有什么打算对此做些什么。是的,jQuery-v3的
then
符合规范-它使用承诺实现的任何值调用回调。有多个实现允许使用其他承诺对象履行承诺(尽管ES6不是其中之一)。@guest271314您没有使用
1
进行解析,而是使用
。使用返回值
promise()
解析
d。显然jQuery直接将其作为实现值。除了命名差异
resolve
vs
fulfill
,没有任何东西表明这应该以不同的方式工作,因为没有延迟的规范。