gpt4 book ai didi

jquery - 在 JQuery.Deferred 对象之间传播事件

转载 作者:行者123 更新时间:2023-12-01 00:28:31 25 4
gpt4 key购买 nike

如何将一个 JQuery.Deferred() 对象上的所有事件传播到另一个对象?

有没有更好/更简单/更短的方法来处理 .fail .then .done通过调用其他对象 .rejectWith.resolveWith ?我假设我不必处理 .done .then 因为当我调用 Reject 或resolve 时它将被调用。

我怀疑也许可以使用 .pipe 来完成此操作,但我不确定如何实现。

更新:

注意:我还根据 @Frédéric Hamidi 的评论修复了上面的一些文本。

我想要实现的目标如下:

我有一个 API 可以对服务器进行 ajax 调用,他们将返回 ajax 对象(它本身就是一个 $.Deferred)。

在某些时候,我需要处理没有可用网络的情况(这是针对在移动设备上运行的phonegap应用程序)。

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

但在这种情况下,我不会调用 $.ajax,直到用户点击重试,因此我没有 $.Defferred 对象来返回开始调用 API 的函数。

所以我最终明白我可以创建一个新的 $.Defferred 并返回它,并在重试按钮的回调中调用 $.ajax 本身将其设置为“中继”/将延迟事件传播到我的事件刚刚通过将其打洞作为闭合的一部分返回。

但我不确定如何做到这一点。我与 .pipe 方法的混淆是因为它的描述说它是 a:

Utility method to filter and/or chain Deferreds.

我希望这能让我的问题更清楚。

最佳答案

如果我理解正确的话,您只是想要一个 Deferred 来解析/拒绝并通知与您的 ajax 请求完全相同的值?如果是这样,假设您的 Deferred 对象被称为 defer,下面的代码就可以解决问题:

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

它之所以有效,是因为 defer.resolve、defer.reject 和 defer.notify 是词法绑定(bind)的:上下文(this)和值(参数)被正确传递,因此您只是有效地将 ajax Promise 的状态转发到新的 deferred 中。

关于jquery - 在 JQuery.Deferred 对象之间传播事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10267286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com