当前位置: 首页 > 知识库问答 >
问题:

看不到函数内部的变量

仲君昊
2023-03-14

我有一个组件,我将一些数据放入变量users中,以便在另一个函数中读取它。当我在构造函数中打印这个变量并在控制台上打印它时,我可以看到它,但是当我在另一个函数中执行同样的操作时,我没有定义它。我已经尝试将它声明为私有和公共,并得到相同的结果。

如何声明此变量以查看另一个方法中的变量?

这是我的组件:

import { tap, take, map } from 'rxjs/operators';
...

export class SharedProofsComponent implements OnInit {

  page = 1;
  pageSize = 4;
  collectionSize = COUNTRIES.length;
  countries: User[];

  users: User[];

  constructor(private firestore: AngularFirestore) {

    this.firestore.collection<User>('users').valueChanges().pipe(take(1)).subscribe(users => {
    this.users = users;
    // console.log(this.users);
    this.refreshCountries();
    });

  }

  refreshCountries() {
    console.log("USERS:");
    console.log(this.users); // here I got undefined

    this.countries = this.items
      .map((country, i) => ({id: i + 1, ...country}))
      .slice((this.page - 1) * this.pageSize, (this.page - 1) * this.pageSize + this.pageSize);

  }

  ngOnInit(): void {
  }

}

编辑:

如果我把一个静态常数放在我的函数上,我可以得到数据:

this.countries = COUNTRIES
  .map((country, i) => ({id: i + 1, ...country}))
  .slice((this.page - 1) * this.pageSize, (this.page - 1) * this.pageSize + this.pageSize);

但如果我这样做:

   this.countries = this.items
  .map((country, i) => ({id: i + 1, ...country}))
  .slice((this.page - 1) * this.pageSize, (this.page - 1) * this.pageSize + this.pageSize);

我得到了一个错误:

属性'map'不存在于类型'观察

共有3个答案

朱啸
2023-03-14

您必须小心,因为在构造函数方法中使用subscribe in firestore获取数据时,它是一个异步调用。如果在解决请求之前使用refreshCountries函数,则无法正确查看结果。

燕经国
2023-03-14

在订阅回调中添加this.refresh国家();,这样。它变成:

this.firestore.collection<User('users').valueChanges().pipe(take(1)).subscribe(users => {
  this.users = users;
  this.refreshCountries()
});
华温书
2023-03-14

在获取数据之前调用方法,并且异步获取用户。当您调用刷新国家时,在用户变量中没有任何数据。

应该管用

this.firestore.collection<User>('users').valueChanges().pipe(take(1)).subscribe(users => {
    this.users = users; // get users
    this.refreshCountries(); // call method
});
 类似资料:
  • 问题内容: 考虑一下Swift中的此类: 僵尸继承了Monster类的名称字段。 为什么 即使在函数头之前没有mutation关键字也能工作吗? 问题答案: 从语言指南- 方法中 : 从实例方法中修改值类型 结构和枚举是 值 类型。默认情况下,不能从其实例方法中修改值类型的属性。 但是,如果需要在特定方法中修改结构或枚举的属性,则可以选择对该方法进行行为更改。然后,该方法可以从方法内部更改(即更改

  • 问题内容: 我究竟做错了什么?为什么$ path在函数外部正确打印,但是在函数内部无法访问? 问题答案: 因为它没有在函数中定义。 有几种方法可以解决此问题: 1)使用亚历克斯所说的话,告诉函数它是一个全局变量: 2)将其定义为常量: 3)如果特定于该函数,则将其传递给该函数: 根据功能的实际工作原理,其中之一会起作用。

  • 我是一个很新的编码,我一直有问题的物理计算器,我一直在做。我做这件事是为了在类项目中使用OOP。我的要点是让用户输入变量,然后它们被运到类文件上的等式中,然后最后显示结果。当我尝试编译时,它说函数getAnswer看不到它上面声明的结果。我计划对这个方程进行16次迭代,所以我首先要弄清楚为什么这一次不起作用。欢迎任何回答。 -谢谢 这是类文件

  • 我正在尝试使用Mongo和node/express JS的这个map函数构建一个对象数组。由于某种原因,当我运行控制台时,数组返回空。在map函数外部记录日志,但在map函数内部,它显示了每次迭代生成的数组。 为什么会发生这种行为?

  • 我只是想学习Angular 2(特别是Angular 8),就我的一生而言,我不明白为什么类变量在类函数中是“未定义”的,但如果我用ES6风格编写函数,它是可以访问的。 我尝试在构造函数中设置,但这没有意义。 一旦调用HandleClickStart,每1.5秒输出一次NaN。为什么????我本以为是1 2 3...... 通过这种方式实现handleClickStart,可以获得预期的结果: 但

  • 严格说来,Ruby中没有函数.但Kernel模块中定义的方法(可以在任何地方用做函数,因此)可被其他语言当做函数来调用.若您对这些方法进行再定义时,就必需考虑到对其他方面的影响. `str 把字符串str当做外部命令来运行,并以字符串方式返回命令的输出.使用`str`形式来调用该方法(还可以使用%x(...)表示法进行调用.请参考命令输出). 可以使用$?来了解命令的结束状态. 若您只想执行命令,