gpt4 book ai didi

javascript - 无法设置未定义的属性 'XY'

转载 作者:行者123 更新时间:2023-11-29 15:34:04 25 4
gpt4 key购买 nike

我有以下代码:

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;
});

我的问题是它每次都说“无法将属性 existingProperty 设置为未定义”。而且我不知道为什么 multiple[i] 应该在这一行未定义:

multiple[i].existingProperty= arrayOfSomething;

我确定该属性存在。并且它被定义了,它是一个空数组。我想用我在循环中制作的数组替换这个空数组。错在哪里?如何用我的数组填充 existingProperty?

最佳答案

Service.getAllBySomething 是异步的吗?因为在那种情况下,当回调函数运行时,i(仅在闭包中捕获)已被移动到数组的末尾。

在分派(dispatch)异步调用时使用额外的闭包来捕获 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;
};
}() );

请注意新函数接收 i 作为参数并返回您之前使用的函数。我立即调用(IIFE)返回要作为回调传递的函数。在该函数内部,i 的值将与您分派(dispatch)此异步调用时的值相同,因为它在用作参数时被复制。

关于javascript - 无法设置未定义的属性 'XY',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31472539/

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