【发布时间】:2015-01-10 07:40:09
【问题描述】:
我创建了一个工厂来处理我所有的 http 相关调用。它返回以下内联代码:
return {
get: function (opts) {
var deferred = $q.defer();
var def = defaultOptions(HttpMethod.Get);
$.extend(def, opts);
$http({ method: 'get', url: config.remoteServiceName + def.url }).then(function (result, status, header) {
def.success(deferred, { data: result });
}, function (data) {
def.error(deferred, data);
});
return deferred.promise;
},
post: function (opts) {
var deferred = $q.defer();
var def = defaultOptions(HttpMethod.Post);
$.extend(def, opts);
$http.post(config.remoteServiceName + def.url, def.data).then(function (result) {
def.success(deferred, result);
}, function (data) {
def.error(deferred, data);
});
return deferred.promise;
},
remove: function (opts) {
var deferred = $q.defer();
var def = defaultOptions(HttpMethod.Delete);
$.extend(def, opts);
$http({ method: 'delete', url: config.remoteServiceName + def.url }).then(function (result) {
def.success(deferred, result);
}, function (data) {
def.error(deferred, data);
});
return deferred.promise;
}
};
现在,当我进行调用时,如果进行的并行调用很少,则所有承诺解决方案都会混淆。我正在从另一个请求中的一个请求中获取结果集。
无法解决问题。我做错了什么?
【问题讨论】:
-
我猜 defaultOptions 总是返回同一个对象,所以你会在每次调用你的一个函数时覆盖对象时对最后一个回调集进行多次调用
-
我遇到了完全相同的问题。有什么解决办法吗?
-
@hofnarwillie 问题不是并行调用。那是在别的地方。用于 ajax 执行的 JS 模型工作正常,并且 $http 也没有问题。我们使用 WebAPI 作为后端,我们的一些全局过滤器有状态,每次调用都会改变。因此,数据被混淆了。客户端没有问题。
-
@sandeep 您应该将问题标记为已解决
标签: angularjs angular-promise angularjs-http