我有一个看起来像这样的字符串数组(每次都是随机的)
["consumables", "spells", "spells", "consumables", "spells", "consumables", "spells", "characters", "characters", "consumables"]
然后我循环通过这个数组,并根据索引我调用不同的.subscribe
并将一些数据推送到新数组。
for (var i = 0; i < arrayOfItems.length; i++) {
switch (arrayOfItems[i]) {
case 'spells':
this.spellsSubscribeSet = true;
this.spellsSubscribe = this.spells.subscribe(data => {
const itemId = this.getRandom(data.length - 1);
this.rewardPack.push(data[itemId]);
});
break;
case 'characters':
this.charactersSubscribeSet = true;
this.charactersSubscribe = this.characters.subscribe(data => {
const itemId = this.getRandom(data.length - 1);
this.rewardPack.push(data[itemId]);
});
break;
case 'consumables':
this.consumablesSubscribeSet = true;
this.consumablesSubscribe = this.consumables.subscribe(data => {
const itemId = this.getRandom(data.length - 1);
this.rewardPack.push(data[itemId]);
});
break;
default:
return null;
}
}
.getRandom是一个返回随机数的普通函数。
getRandom(x) {
return Math.floor(Math.random() * x);
}
奇怪的是,只有&#39;拼写&#39;被多次打电话。
我读了一些关于.flatMap的内容,但我不认为这可以帮助我,因为我循环一个普通的数组。
我正在使用firestore数据库
答案 0 :(得分:0)
我保存了构造函数加载所需的所有数据,然后在代码中使用它,我需要它。
答案 1 :(得分:0)
你的循环可能多次击中'咒语'案例,多次订阅咒语事件,因此订阅中的代码被多次调用。
在每种情况下,您都应该检查您是否已经订阅了该活动。像这样:
if (!this.consumablesSubscribeSet){
this.consumablesSubscribeSet = true;
this.consumablesSubscribe = this.consumables.subscribe(data => {
const itemId = this.getRandom(data.length - 1);
this.rewardPack.push(data[itemId]);
});
}
break;