【发布时间】:2023-03-18 21:08:01
【问题描述】:
我正在使用 jQuery 1.8.3 我有一个返回新 jQuery.Deferred() 的函数。当我使用deferred.then() 链接到此函数的调用时,根据文档,我希望在前面的函数返回时调用给定的函数,并接收jQuery.Deferred() 作为输入。
实际上,当前面函数的jQuery.Deferred() 用deferred.resolve() 发出信号时,调用给定函数,并接收传递给.resolve() 的值。
实际行为是我想要的,但我担心我依赖于未记录/不受支持的行为,或者我实际上有一个错误,造成了我想要的错觉。
例如,给定
function async_task(i) {
console.log("Starting async_task(" + i + ")\n");
var def = $.Deferred();
setTimeout(function() {
console.log(" finished " + i + "\n");
def.resolve(i + 1);
}, 1000);
return def;
}
console.log("starting\n");
var p;
p = async_task(1);
p = p.then(async_task);
p = p.then(async_task);
p.then(function() {
console.log("done\n");
});
输出是
starting
Starting async_task(1)
finished 1
Starting async_task(2)
finished 2
Starting async_task(3)
finished 3
done
但我希望
starting
Starting async_task(1)
finished 1
Starting async_task(2)
Starting async_task([object Object])
done
finished 2
finished [object Object]
我当然可以想象 jQuery 正在探索传递给 .then() 的函数返回的内容,以及是否是延迟/承诺做我想做的事情,但我找不到支持该想法的文档。
为什么我对文档的期望与我观察到的不一致?我是否忽略了文档?这是我不应该依赖的无证行为吗?我真的有错误吗?
【问题讨论】:
-
你的意思是
.then()而不是.next()? -
GregL:你说得对,谢谢。我已经修好了。尴尬,因为代码示例是正确的,所以至少有时我写的东西是正确的。
标签: javascript jquery asynchronous jquery-deferred