多个请求,相同的响应

时间:2014-10-08 04:44:56

标签: angularjs rest deferred

我正在使用$ 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。我真的不知道如何应对这个麻烦。这真令人讨厌。

2 个答案:

答案 0 :(得分:0)

在$ q.all中,你想要传递一组promise,而不是执行该函数。 $ httpPromiseA。$ promise而不是$ httpPromiseA()等等。

答案 1 :(得分:0)

问题出在服务器端,它遇到了同时请求的问题,并回答了所有与同一响应一起的问题。

感谢所有支持和关注。