$q.all 处出错
Error at $q.all
我在 AngularJS 中编写了以下代码来执行多重承诺:
控制器
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 的响应。控制台输出显示:
响应
Object: { brands: undefined, setUp: data}
谁能解释一下为什么我只得到第一个函数的响应?
谢谢
在 getSetup()
中,您将使用 defered.resolve(response);
解决承诺,而在 getBrands()
中,您将使用 defered.resolve(response.data);
品牌响应似乎是一个对象,但没有字段数据。检查该字段是否确实存在于网络面板的响应正文中。
您可能打算单独解决 response
。
另外 - 如果您根本不修改响应,您可以简化您的方法:
var getBrands = function () {
return $http({
method: 'GET',
url: _config.WsUrl + 'api/GetBrandsList'
});
};
我在 AngularJS 中编写了以下代码来执行多重承诺:
控制器
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 的响应。控制台输出显示:
响应
Object: { brands: undefined, setUp: data}
谁能解释一下为什么我只得到第一个函数的响应?
谢谢
在 getSetup()
中,您将使用 defered.resolve(response);
解决承诺,而在 getBrands()
中,您将使用 defered.resolve(response.data);
品牌响应似乎是一个对象,但没有字段数据。检查该字段是否确实存在于网络面板的响应正文中。
您可能打算单独解决 response
。
另外 - 如果您根本不修改响应,您可以简化您的方法:
var getBrands = function () {
return $http({
method: 'GET',
url: _config.WsUrl + 'api/GetBrandsList'
});
};