传播JQuery.Deferred对象之间的事件(Propagating events betwee

2019-09-16 16:21发布

我怎样才能传播到另一个在一个JQuery.Deferred()对象的所有活动?

有没有更好/更简单/短路,然后同时处理.fail.then .done通过调用其他对象.rejectWith.resolveWith ? 我假设我没有处理.done .then ,当我打电话拒绝或解决它会被称为。

我猜想,也许这是可以做到用.pipe ,但我不知道怎么样。

更新:

注:我也我固定的一些文字上述每@弗雷德里克·哈米迪的评论。

我想实现是以下几点:

我已经陷入到服务器,让AJAX调用一个API,他们将返回Ajax对象(这是一个$ .Deferred本身)。

在某些时候,我需要处理的情况下我可以不净的工作(这是一个移动设备上运行的应用程序的PhoneGap)。

我想要做的是,在没有网络连接的情况下,我会显示一个对话框,提示用户修复网络问题并点击“重试”。

但是,在这种情况下我也不会叫$阿贾克斯,直到用户点击重试,所以我没有一个$ .Defferred对象返回调用的API,以开始与功能。

所以最后我的理解是,我可以创造一个新的$ .Defferred并返回它和回调重试按钮来调用$就自己将其设置为“接力” /传播defferred事件,我只是返回的一个入座它作为封闭件的一部分。

但我不知道做它的方式。 我与该查询股价.pipe方法是因为它的描述说,它的一个:

实用方法来筛选和/或链Deferreds。

我hoep这使我的问题更加清晰。

Answer 1:

如果我理解正确的话,你只是想推迟到解决/拒绝,并具有完全相同的价值为您的Ajax请求通知? 如果是这样,假设你的递延对象称为延迟,下面的代码将这样的伎俩:

$.ajax( ... ).done( defer.resolve ).fail( defer.reject ).progress( defer.notify );

它的工作原理是因为defer.resolve,defer.reject和defer.notify是词法约束:上下文(本)和值(参数)被正确地传递,所以你只是有效地转发了ajax承诺的状态改变成新的推迟。



Answer 2:

如果你有2点延期的对象,D1和D2,可以从D2与传播到D1: d2.then(d1.resolve,d1.reject,d1.notify)

举个例子: http://jsfiddle.net/bgrossi/XTJEf/



文章来源: Propagating events between JQuery.Deferred objects