【问题标题】:Is it possible to cancel Breeze requests (AngularJS)?是否可以取消微风请求(AngularJS)?
【发布时间】:2014-05-02 23:22:16
【问题描述】:

我正在尝试找到一种方法来取消 BreezeJS 查询,以实现在按键上查询 BreezeJS 的实时搜索(请参阅我的 other question)。

我知道在 Angular 中,$http 请求可以通过将承诺传递给config 对象中的timeout 参数,然后在该承诺上调用resolve() 来取消。

我也知道我可以让 BreezeJS 使用我的模块的 $http 实例:

var ajax = breeze.config.initializeAdapterInstance('ajax', 'angular');
ajax.setHttp($http);

所以我正在考虑可能在$http 上创建一个request 拦截器,它将config.timeout 设置为一个承诺。但这仍然让我距离解决问题还有很长的路要走,因为我需要以某种方式从运行查询的代码中向我的拦截器提供承诺(以便查询代码可以在需要时resolve() 承诺)。

有没有更好的方法?有没有可能?

【问题讨论】:

    标签: javascript ajax angularjs breeze


    【解决方案1】:

    2014 年 5 月 16 日更新

    从 v.1.4.12 开始,您可以使用 AJAX 适配器的 requestInterceptor 设置 HTTP 级别的超时和取消。请参阅文档"Controlling AJAX calls"。

    原答案

    EntityManager HTTP 服务操作不提供取消或超时选项。也许有一天他们会的。

    v.1.4.11 Breeze AJAX 适配器 也不提供取消或超时选项。 但他们会在 v.1.4.12 中,你现在可以在 github 上看到预览。

    github 上的示例说明了新适配器的取消和超时。对于 jQuery AJAX 组件的用户,有DocCode:jQueryAjaxAdapterTests.js。对于 Angular 的$http 的用户,有Zza-Node-Mongo:ajax-adapter.async.spec.js。

    如果您可以运行示例是最好的,但如果您不能(可能是因为您没有使用所涉及的技术之一),那么测试文件(请参阅上面的链接)很容易阅读,您应该收集这些想法这会有所帮助。至少我希望如此。

    用法

    取消和超时是有用的功能。您的用例是否需要它们?也许。但您需要采取第一步,对用户输入到您的“实时搜索”中的文本进行去抖动处理,这样您就不会触发 100 次无意义的查询。

    your related StackOverflow question 讨论了该观察结果。

    【讨论】:

    • 取消功能现已在 v.1.4.12 中上线
    • 这有点离题,但我想知道您是否愿意在这里查看我的答案:stackoverflow.com/a/23795982/546561 并让我知道这是否是一种理智的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多