jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 链接$.Deferred大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望理解为什么我在尝试直接链接延迟对象时会遇到不同的行为,而不是尝试通过将对象保存在变量中并在该变量上调用一个或多个延迟方法来进行链接.

将对象保存在变量中时,发送到每个函数的值是相同的(在下面的代码片段的情况下,5) – 即在这种情况下值不会过滤.当直接链接时,值会过滤…所以我不清楚在几个不同的语句中设置Deferred.pipe()时如何进行过滤.通过我对jquery docs的阅读,它应该是可能的:

我究竟做错了什么?

这是我的代码

<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>

解决方法

$.Deferred对象确实是可链接的,但是在你的第二个场景中,你没有链接任何东西;当$.Deferred被解析或拒绝时,您只是将多个管道分配给要独立执行的$.Deferred对象.换句话说,您忽略了返回的Promise对象,该对象包含要传递给链中下一个.pipe()的过滤/修改值.

docs

要在第二个示例中实现所需,请管理生成的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);

DEMO.

大佬总结

以上是大佬教程为你收集整理的jquery – 链接$.Deferred全部内容,希望文章能够帮你解决jquery – 链接$.Deferred所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。