Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法设置属性';XY';未定义的_Javascript_Angularjs_Asp.net Web Api - Fatal编程技术网

Javascript 无法设置属性';XY';未定义的

Javascript 无法设置属性';XY';未定义的,javascript,angularjs,asp.net-web-api,Javascript,Angularjs,Asp.net Web Api,我有以下代码: var favourites = JSON.parse(localStorage.getItem("favourites")); Service.all().then(function (multiple) { var array = []; for (var i = 0; i < multiple.length; i++) { for (var j = 0; j < favourite

我有以下代码:

var favourites = JSON.parse(localStorage.getItem("favourites"));

Service.all().then(function (multiple) {
        var array = [];            

        for (var i = 0; i < multiple.length; i++) {
           for (var j = 0; j < favourites.length; j++) {
              if (favourites[j].checked === true) {
                 if (multiple[i].Name === favourites[j].name) {

                    Service.getAllBySomething(multiple[i].Id).then(function (resources) {
                       var arrayOfSomething = [];

                       for (var k = 0; k < resources.length; k++) {
                                                     arrayOfSomething.push(resources[k].ResourceCategoryId);
                       }                           
                       arrayOfSomething = arrayOfSomething .filter(function (elem, pos, arr) {
                          return arr.indexOf(elem) == pos;
                       });
                       multiple[i].existingProperty= arrayOfSomething;
                    });                        
                    array.push(multiple[i]);
                 }
              }                  
           }
        }            
        $scope.vendors = array;
     });
我敢肯定,财产是存在的。它被定义为一个空数组。我想用我在循环中创建的数组替换这个空数组。
故障在哪里?如何用数组填充现有属性?

服务。是否有可能通过某种方式获取所有
异步?因为在这种情况下,在回调函数运行时,
i
(仅在闭包中捕获)已移动到数组的末尾

在调度异步调用时,使用额外的闭包捕获
i
的值,如下所示:

Service.getAllBySomething(multiple[i].Id).then(function(i){
     return function (resources) {
                   var arrayOfSomething = [];

                   for (var k = 0; k < resources.length; k++) {
                                                 arrayOfSomething.push(resources[k].ResourceCategoryId);
                   }                           
                   arrayOfSomething = arrayOfSomething .filter(function (elem, pos, arr) {
                      return arr.indexOf(elem) == pos;
                   });
                   multiple[i].existingProperty= arrayOfSomething;
                };
}() );    
Service.getAllBySomething(多个[i].Id)。然后(函数(i){
返回函数(资源){
var arrayOfSomething=[];
for(var k=0;k
注意新函数作为参数接收
i
,并返回您以前使用的函数。我立即调用(an)以返回作为回调传递的函数。在该函数中,i的值将与您分派此异步调用时的值相同,因为它在用作参数时被复制。

可能重复@user3679607,您可以发布一个吗?(强调自给自足)
Service.getAllBySomething(multiple[i].Id).then(function(i){
     return function (resources) {
                   var arrayOfSomething = [];

                   for (var k = 0; k < resources.length; k++) {
                                                 arrayOfSomething.push(resources[k].ResourceCategoryId);
                   }                           
                   arrayOfSomething = arrayOfSomething .filter(function (elem, pos, arr) {
                      return arr.indexOf(elem) == pos;
                   });
                   multiple[i].existingProperty= arrayOfSomething;
                };
}() );