我在AngularJS中编写了以下代码,用于执行多重承诺:
CONTROLLER
var promisesSetUp = {
setUp: getSetup(),
brands: getBrands()
}
var getSetup = function () {
var defered = $q.defer();
var promise = defered.promise;
$http({
method: 'GET',
url: _config.WsUrl + 'api/SalesSetup'
}).then(function successCallback(response) {
defered.resolve(response);
}, function errorCallback(response) {
defered.reject(response);
});
return promise;
};
var getBrands = function () {
var defered = $q.defer();
var promise = defered.promise;
$http({
method: 'GET',
url: _config.WsUrl + 'api/GetBrandsList'
}).then(function successCallback(response) {
defered.resolve(response.data);
}, function errorCallback(response) {
defered.reject(response);
});
return promise;
};
$q.all(
promisesSetUp
).then(function (data) {
console.log(data);
}, function (error) {
console.error(data)
});
当我执行此代码时,我只有函数getSetUp的响应。控制台输出显示:
RESPONSE
Object: { brands: undefined, setUp: data}
任何人都可以解释为什么我只得到第一个函数的响应?。
由于
答案 0 :(得分:2)
在getSetup()
defered.resolve(response);
中,您getBrands()
在defered.resolve(response.data);
response
var getBrands = function () {
return $http({
method: 'GET',
url: _config.WsUrl + 'api/GetBrandsList'
});
};
{{1}}
品牌响应似乎是一个对象,但没有现场数据。检查该字段是否存在于网络面板的响应正文中。
您可能只想单独使用{{1}}来解决问题。
此外 - 如果您根本不修改回复,则可以简化方法:
{{1}}