AngularJS .then 的未定义
AngularJS .then of undefined
我有一个要发布到 API 的负载。我正在调用从我的控制器调用 API 的方法:
arisService.getVarStatData(
JSON.stringify($scope.payload),
JSON.stringify($scope.config.index_info),
field,
stat
)
.then(function (data) {
$scope.varStat = data;
console.log("var stat data", $scope.varStat);
});
在我的服务中,因为 FIELD 是一个数组,所以我有一个 for 循环将数组的值推送到有效载荷,然后调用一个以有效载荷作为参数的函数:
function getVarStatData(payload, index, field, stat) {
for (var i = 0; i < field.length; i++) {
if (field[i]) {
var varStatData = {
user_selection: payload,
index_info: index,
field: field[i],
statistic: stat
};
postStatData(varStatData);
}
}
}
function postStatData(varStatData){
var deferred = $q.defer();
$http({
url: 'API',
method: "POST",
data: $.param(varStatData),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function (response) {
var varStat = response.data;
console.log("variable stat response data", varStat);
deferred.resolve(varStat);
});
return deferred.promise;
}
现在我能够在我的服务中完美地获取数据,但在我的控制器中我得到一个错误“无法读取 属性 of .then of undefined。最初我没有使用 $ 解决承诺q 所以我做了它并认为可以完成工作但运气不好。感谢任何帮助!
问题是 promise 对象没有从 getVarStatData
方法得到 returned,所以你需要 return 来自 getVarStatData
的 postStatData
函数方法。
function getVarStatData(payload, index, field, stat) {
var result = [], promise;
for (var i = 0; i < field.length; i++) {
if (field[i]) {
var varStatData = {
user_selection: payload,
index_info: index,
field: field[i],
statistic: stat
};
promises.push(postStatData(result));
}
}
//this will call the data method once all postStatData is accomplished
return $q.all(promises);
}
如果你想在多个异步函数调用后做某事,你可以使用.all()
。
function getVarStatData(payload, index, field, stat) {
var promises = [];
for (var i = 0; i < field.length; i++) {
if (field[i]) {
var varStatData = {
user_selection: payload,
index_info: index,
field: field[i],
statistic: stat
};
promises.push(postStatData(varStatData));
}
}
return $q.all(promises);
}
all
承诺通过一系列针对它所获得的承诺的解决方案得到解决。
请参阅此页面上的文档 - https://docs.angularjs.org/api/ng/service/$q
我有一个要发布到 API 的负载。我正在调用从我的控制器调用 API 的方法:
arisService.getVarStatData(
JSON.stringify($scope.payload),
JSON.stringify($scope.config.index_info),
field,
stat
)
.then(function (data) {
$scope.varStat = data;
console.log("var stat data", $scope.varStat);
});
在我的服务中,因为 FIELD 是一个数组,所以我有一个 for 循环将数组的值推送到有效载荷,然后调用一个以有效载荷作为参数的函数:
function getVarStatData(payload, index, field, stat) {
for (var i = 0; i < field.length; i++) {
if (field[i]) {
var varStatData = {
user_selection: payload,
index_info: index,
field: field[i],
statistic: stat
};
postStatData(varStatData);
}
}
}
function postStatData(varStatData){
var deferred = $q.defer();
$http({
url: 'API',
method: "POST",
data: $.param(varStatData),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function (response) {
var varStat = response.data;
console.log("variable stat response data", varStat);
deferred.resolve(varStat);
});
return deferred.promise;
}
现在我能够在我的服务中完美地获取数据,但在我的控制器中我得到一个错误“无法读取 属性 of .then of undefined。最初我没有使用 $ 解决承诺q 所以我做了它并认为可以完成工作但运气不好。感谢任何帮助!
问题是 promise 对象没有从 getVarStatData
方法得到 returned,所以你需要 return 来自 getVarStatData
的 postStatData
函数方法。
function getVarStatData(payload, index, field, stat) {
var result = [], promise;
for (var i = 0; i < field.length; i++) {
if (field[i]) {
var varStatData = {
user_selection: payload,
index_info: index,
field: field[i],
statistic: stat
};
promises.push(postStatData(result));
}
}
//this will call the data method once all postStatData is accomplished
return $q.all(promises);
}
如果你想在多个异步函数调用后做某事,你可以使用.all()
。
function getVarStatData(payload, index, field, stat) {
var promises = [];
for (var i = 0; i < field.length; i++) {
if (field[i]) {
var varStatData = {
user_selection: payload,
index_info: index,
field: field[i],
statistic: stat
};
promises.push(postStatData(varStatData));
}
}
return $q.all(promises);
}
all
承诺通过一系列针对它所获得的承诺的解决方案得到解决。
请参阅此页面上的文档 - https://docs.angularjs.org/api/ng/service/$q