gpt4 book ai didi

javascript - Angular - 多个 promise 包含在一个 promise 中

转载 作者:行者123 更新时间:2023-12-02 16:13:44 25 4
gpt4 key购买 nike

我有几个服务,它们通过对象上的标志返回相同类型的对象,只是返回不同类型的对象。这些服务具有返回 promise 的功能。

服务 1 - getPlaces:

this.getPlaces = function () {
return $http.get('http://somewhere.com').then(function (response) {
return response;
}).catch(exception.catcher('Something went wrong'));
};

服务 2 - getPlaces:

this.getPlaces = function () {
return $http.get('http://somewhere.com/').then(function (response) {
return response;
}).catch(exception.catcher('Something went wrong'));
};

我还有一个包装器服务,它调用这两个服务,并且我不希望服务包装器中的函数返回组合结果,直到两个 promise 完全执行并返回结果(或 null)。我目前正在按以下方式执行此操作:

    this.getCombinedResults = function () {
var combined= [];

var apiCalls = [service1.getPlaces(), service2.getPlaces()];

$q.all(apiCalls.map(function(call) {
return call;
})).then(function (response) {
angular.forEach(response, function (item, index) {
combined.push(item);
});
});
return combined;
};

这是在一个 promise 中包装多个 promise 的正确方法吗?如果不是应该改变什么。我认为它工作不正常,特别是在我的包装服务中。当调用包装服务函数时,它返回 null。

我将对此进行更多研究,但如果我能了解我所写的内容是否正确,那就太好了。谢谢。

最佳答案

由于 getCombinedResults 正在调用基于 promise 的服务,因此该服务也应该返回一个 promise ,否则组合将始终为空。

就这么做

 return $q.all(apiCalls.map(function(call) {
return call;
})).then(function (response) {
angular.forEach(response, function (item, index) {
combined.push(item);
});
return combined;
});

因为 then 也返回一个 Promise,所以此代码将向调用者返回一个 Promise。

解析值将被组合

此外,在调用代码中,您需要使用 then 使用基于 promise 的响应解析。

关于javascript - Angular - 多个 promise 包含在一个 promise 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29891871/

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