是否有可能取消微风请求(AngularJS)

Is it possible to cancel Breeze requests (AngularJS)?

本文关键字:AngularJS 请求 微风 有可能 取消 是否      更新时间:2023-09-26

我正试图找到一种方法来取消BreezeJS查询,以便实现在按键上查询BreezeJS的实时搜索(参见我的其他问题)。

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

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

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

所以我在考虑可能在$http上创建一个request拦截器,将config.timeout设置为承诺。但这仍然让我离解决问题有几步之遥,因为我不知何故需要能够从运行查询的代码中向我的拦截器提供承诺(以便查询代码可以在需要时resolve()承诺)。

有更好的方法吗?这可能吗?

2014年5月16日更新

您可以使用AJAX适配器的requestInterceptor设置http级超时和取消。请参阅文档"控制AJAX调用"。

<标题>原始回答

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

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

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

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

使用

Cancel和timeout是有用的特性。您的用例需要它们吗?也许吧。但是,你可能想要迈出第一步,消除用户输入"实时搜索"的文本的反弹。这样你就不会发出上百个毫无意义的查询了。

该观察结果在您的相关StackOverflow问题中讨论。