繁体   English   中英

是否可以取消Breeze请求(AngularJS)?

[英]Is it possible to cancel Breeze requests (AngularJS)?

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

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

我也知道我可以让BreezeJS通过以下方式使用模块的$http实例:

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

因此,我正在考虑可能在$http上创建一个request拦截器, $httpconfig.timeout设置为promise。 但这仍然使我离解决问题还有很多步骤,因为我将需要以某种方式能够从运行查询的代码中向我的拦截器提供承诺(以便查询代码可以在需要时对promise进行resolve() )。

有没有更好的办法? 可能吗?

2014年5月16日更新

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

原始答案

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

v.1.4.11 Breeze AJAX适配器也不提供取消或超时选项。 但是它们将出现在1.4.12版中 ,您现在可以在github上看到预览。

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

最好是可以运行示例,但如果不能运行(也许是因为您未使用所涉及的技术之一),则易于阅读测试文件(请参见上面的链接),并且应该收集有帮助的想法。 至少我希望如此。

用法

取消和超时是有用的功能。 您的用例是否需要它们? 也许。 但是,您需要采取第一步,将用户输入到“实时搜索”中的文本反跳,以免触发100多个无意义的查询。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM