我正面临着$ http服务的这个奇怪问题:每一个对我所工作的公司提供的API的请求都包含在$ q.all()中,并返回相同的响应。多个请求,相同的响应
var promises = [
$httpPromiseA(),
$httpPromiseB(),
$httpPromiseC()
];
$q.all(promises)
.then(function (response) {
$log.log(response);
});
// $log.log returns [expectedObjectFromA, expectedObjectFromA, expectedObjectFromA]
这是随机发生的:expectedObjectFromA可以是expectedObjectFromB或expectedObjectFromC。事实上,所有三个对象返回相同,或两个一个,其他等。
如果我链接一个接一个,以线性方式,他们都工作完美,但需要更多时间来当然,完成任务。
var def = $q.deferred();
var resolvedData = [];
$httpPromiseA()
.then(function (response) {
$log.log(response);
resolvedData.push(reponse);
return $httpPromiseB();
})
.then(function (response) {
$log.log(response);
resolvedData.push(reponse);
return $httpPromiseC();
})
.then(function (response) {
$log.log(response);
resolvedData.push(reponse);
return def.resolve(resolvedData);
});
return def.promise();
// $log.log returns [expectedObjectFromA],
// [expectedObjectFromB] and [expectedObjectFromC]
// as expected. ResolvedData brings [expectedObjectFromA,
// expectedObjectFromB, expectedObjectFromC].
你能给我一些指示,说明这里可能发生了什么吗?
我正在使用$ http和$ q的核心实现。我已经尝试了一个$ q.allSettled,作为$ decorator应用,基于Kris Kowalk的Q的API资源,但没有成功。
谢谢。
编辑1:
我无法通过函数的参数分开,因为它是一个包装函数调用多数民众赞成在$http
服务,在这里我的应用程序。包装函数期望String
作为第一个参数,而Object
作为第二个参数。包装函数返回$http
调用。
编辑2:
这Plunker调用2个并发请求,一到Instagram的API,另一个Flickr的API。这个问题不会发生在这个Plunker上。我真的不知道如何处理这个麻烦。这真的很烦人。
var promises = [$ httpPromiseA(),$ httpPromiseB(),$ httpPromiseC()]; (函数(responseA,responseB,responseC){$ log.log(response);}); // $ log.log返回[expectedObjectFromA,expectedObjectFromA,expectedObjectFromA]。您需要分别收集诺言中的每个回复。尝试上面的代码更改希望它起作用 – 2014-10-08 04:59:09
@CoderJohn你看到了这个问题?你的解决方案没有意义。尝试处理一个'$ q.all()'就像你建议的那样...... – 2014-10-08 05:06:22
为了澄清,你是否试图解决一个错误的/损坏的API,当你尝试使用并发请求时有时会中断? – 2014-10-08 07:10:23