我有一个函数,它将每个键从Firebase推送到数组,以便在项目中进一步使用。
// component.ts
let x = this.wordService.getWords();
let randWordList: any[] = new Array();
x.snapshotChanges().subscribe(word => {
word.forEach(element => {
randWordList.push(element.key);
// here it works correct
console.log(randWordList[0]);
// throw in console -L6VLfqZqj8AeYT_0jwt
});
});
当我通过名称检查控制台整个数组时,它输出正确,但我无法访问随机数组成员。
console.log(randWordList);
// outputs []
// "0": -L6VLfqZqj8AeYT_0jwt
// ...
// length: 8
console.log(randWordList[3]);
// return undefined;
console.log(randWordList["3"]);
// return undefined;
希望有人能帮助我理解我做错了什么。
答案 0 :(得分:2)
您要将randWordList
变量声明两次。这使得订阅工作,但在回调之外,变量保留了它的空列表的原始值。
更改为:
// component.ts
public someFunction() {
let x = this.wordService.getWords();
let randWordList: any[] = new Array();
x.snapshotChanges().subscribe(word => {
word.forEach(element => {
randWordList.push(element.key);
console.log(randWordList[0]); // => "-L6VLfqZqj8AeYT_0jwt"
});
// use randWordList here since it is now populated.
});
console.log(randWordList[0]); // => undefined (subscribe callback has not been called)
}
答案 1 :(得分:1)
正如@Teddy Sterne所评论的那样,您已经声明了randWordList
两次并且正在使用randWordList
中的范围subscribe
,而您想要做的就是使用外部声明。< / p>
只需将日志记录移到forEach
之外,您就可以按照自己的意愿行事,并按索引访问数组。