gpt4 book ai didi

javascript - 如何在 AngularJS 循环中调用第二个顺序 Promise 设计模式方法?

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

刚接触 angularjs 并第一次尝试 Promise 模式 -

我有一个服务实用程序,里面有这个方法 -

this.getData= function(url){
var defer = $q.defer();

$http({method: 'GET', url: url}).
success(function(data, status){
defer.resolve(data);
})
.error(function(data, status) {
defer.reject(status);
});

return defer.promise;
};

现在在我的 Controller 中,我正在调用一个名为 A() 的方法

   var A = function () {
$scope.myobjectArray = [];


return utility.getData("some url").then(funciton(data)
{

for (i = 0; i < data.length; i++) {
$scope.myobjectArray.push(data[i].attribute1, new Array());

}

}
).
then(function () {

return getTheSecondAttributeArray();
}).catch(function (status) {
//display error

});


};

var getTheSecondAttributeArray = function () {

for (i = 0; i < $scope.myObjectArray.length; i++) {
var secondAttributeArray = [];
var currentType = $scope.myObjectArray[i];
utility.getData("some url").then(function (response) {
for (j = 0; j < response.length; j++) {
//some response manipulation
secondAttributeArray.push(response[j].text);
}
currentType.secondAttribute = secondAttributeArray;
}).catch(function () {//catch error, display message
})

}
}

但是,看起来 $scope.myobjectArray 的最后一个元素(第 n-1 个元素)只是被填充。另外,最后一个元素包含的 secondaryAttributeArray 是 $scope.myobjectArray 的所有对象的所有 secondaryAttribute 的串联数组。

不知道我可以在这里更改什么。

编辑:

当我尝试在“then”函数内访问 $scope.myObjectArray[j] 时,它说 $scope.myObjectArray[j] 未定义。 --> 因此,我创建了一个 currentType 变量,并将 $scope.myObjectArray[j] 分配给它,并且可以在“then”函数中轻松访问该变量。奇怪!

此外,我看到只有 $scope.myObjectArray 的最后一个对象获取值,其余的则不获取值。数组中的其余对象为空

感谢任何帮助。

var myObject = function(firstattribute, secondAttribute){

this.firstattribute = firstattribute;
this.secondAttribute = secondAttribute;
}

Beehive ( Angularjs $q.all ) 的解释是我面临的问题。我只得到最后一个循环的数据。

最佳答案

问题全在于函数闭包。当获取数据返回时,您的 currentType 是最后一个,因为 for j 循环已经结束。因此,您需要做的是将 utility.getData 开始的代码移动到一个单独的方法,传递 currentTypeseccondAttributeArray 的参数,这样闭包将包含它们作为函数的参数,并且不会随着 for j 循环的进行而更改它们。

for (i = 0; i < $scope.myObjectArray.length; i++) { 
var secondAttributeArray = [];
var currentType = $scope.myObjectArray[i];
fillSecondAttributeArray($scope, secondAttributeArray, currentType);
}

关于javascript - 如何在 AngularJS 循环中调用第二个顺序 Promise 设计模式方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039450/

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