【发布时间】:2012-09-19 00:21:15
【问题描述】:
我希望了解为什么在尝试直接链接延迟对象时与尝试通过将对象保存在变量中并在该变量上调用一个或多个延迟方法来链接时得到不同的行为。
当将对象保存在变量中时,发送到每个函数的值是相同的(在下面的代码 sn-p 的情况下,5) - 即在这种情况下值不会过滤。当直接链接时,值过滤......所以我不清楚在几个不同的语句中设置 Deferred.pipe() 时如何进行过滤。通过我对jquery docs 的阅读,应该是可能的:
Deferred 对象是可链接的,类似于 jQuery 对象的可链接方式,但它有自己的方法。创建 Deferred 对象后,您可以通过直接从对象创建链接或将对象保存在变量中并在该变量上调用一个或多个方法来使用以下任何方法。
我做错了什么?
这是我的代码:
<script type="text/javascript">
$(document).ready(function () {
// This works as expected - alert(20)
var defer = new $.Deferred();
defer.pipe(myFunction).pipe(myFunction).pipe(myAlert);
defer.resolve(5);
// This does not work as expected - alert(5)
var defer2 = new $.Deferred();
defer2.pipe(myFunction);
defer2.pipe(myFunction);
defer2.pipe(myAlert);
defer2.resolve(5);
});
var myFunction = function (value) {
return value * 2;
}
var myAlert = function (value) {
alert('The value is ' + value);
}
</script>
【问题讨论】:
-
可能某些操作会返回一个新的 Promise(如
.pipe()),因此链接会在新返回的对象上运行。