我希望理解为什么当我试图直接链接一个延迟对象时,我会有不同的行为,而当我试图通过将对象保存在一个变量中并在该变量上调用一个或多个延迟方法来链接时,我会这样做。
当将对象保存在变量中时,发送给每个函数的值是相同的(在下面的代码片段中,5) --也就是说,在这种情况下,值不过滤。当直接链接时,值过滤..。因此,我不清楚在几个不同的语句中设置Deferred.pipe()时如何进行get过滤。根据我对jquery文档的解读,这应该是可能的:
延迟对象是可链式的,类似于jQuery对象的链式方式,但它有自己的方法。创建延迟对象之后,可以通过直接链接对象创建或将对象保存在变量中并调用该变量上的一个或多个方法来使用下面的任何方法。
我做错了什么?
这是我的代码:
<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>发布于 2012-09-19 00:33:05
$.Deferred对象确实是可链接的,但是在第二个场景中,您没有链接任何东西;您只是将多个pipe分配给要独立执行的$.Deferred对象,而此时$.Deferred要么被解析,要么被拒绝。换句话说,您忽略了--返回的Promise对象,该对象包含要传递给链中的下一个.pipe()的筛选/修改的值。
来自文档
deferred.pipe()方法返回一个新的承诺,它通过函数过滤的状态和值。
要在第二个示例中实现您想要的结果,请使用pipe生成的Promise,而不是原始的$.Deferred对象:
var defer2 = new $.Deferred();
var promise = defer2.pipe(myFunction);
promise = promise.pipe(myFunction); // pipe and update promise
promise.pipe(myAlert);
defer2.resolve(5);演示。
发布于 2012-09-28 17:35:44
乔,我也有同样的情况--电话号码不详。这是如何做到的- JavaScript中的异步循环
https://stackoverflow.com/questions/12486921
复制相似问题