gpt4 book ai didi

angularjs - 在生产中是否适合使用$httpBackend来抽象数据服务请求?

转载 作者:行者123 更新时间:2023-12-02 22:30:01 25 4
gpt4 key购买 nike

我的应用程序中有一个数据服务,负责为我的 Controller 检索信息。该信息可能来自本地存储、窗口或 ajax 请求。我面临的问题是 $q promise 响应看起来不像 $http 响应。

    this.getContactDetails = function(data) {
// The first time this method is called, we expect contact details to be preloaded on the page.
// We want to read and return that object then remove it from the page so subsequent requests are to the server.
if(typeof $window.preloadData.contact !== 'undefined') {
var contactDetails = JSON.parse(JSON.stringify($window.preloadData.contact));
delete $window.preloadData.contact;
// Since the method call should always have the same return type, we manually create a deferred object and set the resolution using the $q service.
var deferred = $q.defer();
deferred.resolve(contactDetails);
return deferred.promise;
}
var request = requests.contactDetails.get;
return $http(request);
};

$q 服务在这里做得很好,但它解析为给定的对象。我真的不希望它能包含响应。我知道$httpBackend可以完成这个任务。

$httpBackend.whenGET(request).respond(contactDetails);

但是该服务在 MockE2E 库中使用,我怀疑这是否是其预期用途。我不知道之后如何取消此操作,或者如果我在同一个请求上使用它两次会发生什么,但我可以弄清楚这些问题。我的另一个担忧是,似乎没有办法将相同的配置对象传递给 $httpBackend,就像我传递给 $http 一样。 $httpBackend 只接受方法、url、正文和 header ,而 $http config 允许我指定参数。

目前我的解决方法就是自己创建类似 $http 的包装器。

var contactDetails = JSON.parse(JSON.stringify({
data: $window.preloadData.contact
}));

但我觉得这不太优雅。有更好/正确的方法吗?

最佳答案

您可以将存储层实现为 $cacheFactory并将其添加到 $httpProvider在配置阶段。

来自文档:

When the cache is enabled, $http stores the response from the server in the specified cache. The next time the same request is made, the response is served from the cache without sending a request to the server.

因此,如果您使用以下方法提供自己的缓存实现:

  • {object} info() — Returns id, size, and options of cache.
  • {{*}} put({string} key, {*} value) — Puts a new key-value pair into the cache and returns it.
  • {{*}} get({string} key) — Returns cached value for key or undefined for cache miss.
  • {void} remove({string} key) — Removes a key-value pair from the cache.
  • {void} removeAll() — Removes all cached values.
  • {void} destroy() — Removes references to this cache from $cacheFactory.

您可以返回从 localStorage、 session cookie 等读取的值,它们将被视为从服务器发送的数据,只是没有 AJAX 请求。

关于angularjs - 在生产中是否适合使用$httpBackend来抽象数据服务请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864578/

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