错误错误:未捕获(承诺):TypeError:无法读取未定义的属性“ CountryArr”

时间:2020-06-07 11:46:35

标签: javascript typescript

当我尝试将JSON推入数组时,它向我显示错误 ERROR错误:未捕获(承诺):TypeError:无法读取未定义的属性'CountryArr',这是下面的代码。

CountryArr: any[] = [];
async ngOnInit() {
    await csc.getAllCountries().forEach(function (index) {
      this.CountryArr.push({ "value": index.id, "name": index.name }); //shows error here
    });

    //this.CountryArr.push({ "value": "0", "name": "-- Select Country --" }); //it works
    //this.CountryArr.push({ "value": "0", "name": "-- Select Countryasdadasd --" }); //it works
    console.log(this.CountryArr);
}

我尝试使用

this.CountryArr.push({ "value": "0", "name": "-- Select Country --" });
this.CountryArr.push({ "value": "0", "name": "-- Select Countryasdadasd --" });

它可以正常工作并在控制台上显示给我,但是在forEach里面可以看到错误。

1 个答案:

答案 0 :(得分:0)

没有CountryArr是this对象,因为在function方法中使用forEach关键字时上下文已更改。因此,您需要将其切换为箭头功能。箭头函数不会创建新的context(scope),因此,每个函数现在都应该工作。 Here是有关JavaScript上下文的详细说明,以及它如何与常规函数和箭头函数一起使用。

CountryArr: any[] = [];
async ngOnInit() {
    await csc.getAllCountries().forEach((index) => {
      this.CountryArr.push({ "value": index.id, "name": index.name })
    });
    console.log(this.CountryArr);
}