如何在 .then 中的循环中使用函数?
How do I use a function inside a loop inside a .then?
我有一个使用 Restangular 访问数据库的 Angularjs 项目。我有三层数据(比如 mydata、mysubdata、mysubsubdata),每一层之间都是一对多的关系。我的问题是,对于我的显示,我需要将 mysubsubdata 连接到 mysubdata。当我尝试从数据库中取回数据时,我在编译器中遇到了一个抱怨,说我不能在循环中使用函数。这是我正在尝试做的事情:
DataService.one(mydata.id).getList('mysubdata')
.then(function(data) {
var dataList = data;
for (returnedData in dataList) {
DataService.one(mydata.id).one('mysubdata',returnedData.id).getList('mysubsubdata')
.then(returnedSubData) {
dataList = angular.extend(dataList, returnedSubData);
});
}
});
我发现的所有示例都在 .then 函数内有循环,或者试图首先返回一堆承诺。我认为这些都不适用。我对 Angular 还是很陌生,所以我可能有点不知所措。也不确定扩展,但这可能是一个单独的问题。
编辑:我怀疑这应该用 $q.all 来完成,但还没有掌握方法。
在你的循环中添加一个 then()
方法是行不通的,因为循环不等待承诺被解决的简单原因。您可以使用递归方法实现此目的。
var myCustomData = null,
dataList = null,
dataListCounter = 0;
DataService.one(mydata.id).getList('mysubdata')
.then(function (data){
dataList = data;
myCustomData = mydata;
$scope.getSubSubData();
});
$scope.getSubSubData = function () {
if (dataList.length >= dataListCounter)
return;
DataService.one(myCustomData.id).one('mysubdata',dataList[dataListCounter].id).getList('mysubsubdata')
.then(function (returnedSubData) {
dataList = angular.extend(dataList, returnedSubData);
dataListCounter++;
$scope.getSubSubData();
});
};
如果有帮助,请告诉我!
对@Anadi Sharma 的回复进行了小幅更正。
$scope.getSubSubData = function () {
if (dataList.length == dataListCounter)
return;
DataService.one(myCustomData.id).one('mysubdata',dataList[dataListCounter].id).getList('mysubsubdata')
.then(function (returnedSubData) {
dataList[dataListCounter].mysubsubdata = returnedSubData;
dataListCounter++;
$scope.getSubSubData();
});
};
请注意,我随后在显示数据时使用过滤器来连接子数据值。
我有一个使用 Restangular 访问数据库的 Angularjs 项目。我有三层数据(比如 mydata、mysubdata、mysubsubdata),每一层之间都是一对多的关系。我的问题是,对于我的显示,我需要将 mysubsubdata 连接到 mysubdata。当我尝试从数据库中取回数据时,我在编译器中遇到了一个抱怨,说我不能在循环中使用函数。这是我正在尝试做的事情:
DataService.one(mydata.id).getList('mysubdata')
.then(function(data) {
var dataList = data;
for (returnedData in dataList) {
DataService.one(mydata.id).one('mysubdata',returnedData.id).getList('mysubsubdata')
.then(returnedSubData) {
dataList = angular.extend(dataList, returnedSubData);
});
}
});
我发现的所有示例都在 .then 函数内有循环,或者试图首先返回一堆承诺。我认为这些都不适用。我对 Angular 还是很陌生,所以我可能有点不知所措。也不确定扩展,但这可能是一个单独的问题。
编辑:我怀疑这应该用 $q.all 来完成,但还没有掌握方法。
在你的循环中添加一个 then()
方法是行不通的,因为循环不等待承诺被解决的简单原因。您可以使用递归方法实现此目的。
var myCustomData = null,
dataList = null,
dataListCounter = 0;
DataService.one(mydata.id).getList('mysubdata')
.then(function (data){
dataList = data;
myCustomData = mydata;
$scope.getSubSubData();
});
$scope.getSubSubData = function () {
if (dataList.length >= dataListCounter)
return;
DataService.one(myCustomData.id).one('mysubdata',dataList[dataListCounter].id).getList('mysubsubdata')
.then(function (returnedSubData) {
dataList = angular.extend(dataList, returnedSubData);
dataListCounter++;
$scope.getSubSubData();
});
};
如果有帮助,请告诉我!
对@Anadi Sharma 的回复进行了小幅更正。
$scope.getSubSubData = function () {
if (dataList.length == dataListCounter)
return;
DataService.one(myCustomData.id).one('mysubdata',dataList[dataListCounter].id).getList('mysubsubdata')
.then(function (returnedSubData) {
dataList[dataListCounter].mysubsubdata = returnedSubData;
dataListCounter++;
$scope.getSubSubData();
});
};
请注意,我随后在显示数据时使用过滤器来连接子数据值。