我正在使用$ 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资源,但也没有成功。
感谢。
我不能单独将参数传递给函数,因为它是一个调用$http
服务的包装函数,在我的应用程序中。包装函数需要String
作为第一个参数,Object
作为第二个参数。包装函数返回$http
次调用。
此Plunker调用2个并发请求,一个用于Instagram API,另一个用于Flickr API。问题不在于此Plunker。我真的不知道如何应对这个麻烦。这真令人讨厌。
答案 0 :(得分:0)
在$ q.all中,你想要传递一组promise,而不是执行该函数。 $ httpPromiseA。$ promise而不是$ httpPromiseA()等等。
答案 1 :(得分:0)
问题出在服务器端,它遇到了同时请求的问题,并回答了所有与同一响应一起的问题。
感谢所有支持和关注。