错误TypeError:无法读取未定义的属性“ open”

时间:2018-07-23 00:36:49

标签: javascript angular

使用Angular 6,我在服务中调用API,然后在控制器中订阅该服务。我成功获取了数据,但是我想在控制器中重组数据,以便稍后将其传递到Chart JS图表中。

这是我的代码,我在控制器女巫中放入了一个方法,然后调用OnInit方法:

getStockData() {
  this.stocksService.getStockData()
    .subscribe(
      (response) => {
        for(var i = 0; i <= response.length; i++) {
          this.stockOpen.push(response[i]['open']); // Error points to this line
          console.log('Data: ', response[i]['open']); //This works
        }
      },
      (error) => console.error(error)
    );
}

我知道至少有一部分是有效的,因为我已经成功地合并了for循环中的数据,但是然后我收到一个似乎无法弄清的错误,因为当我控制台response[i]['open']时可以,但是当我尝试将其推入this.stockOpen时出现错误。

在我看来push方法是问题所在,但我似乎无法弄清楚如何正确或以其他方式做到这一点。

这是错误:

ERROR TypeError: Cannot read property 'open' of undefined
    at SafeSubscriber._next (alpha.component.ts:26)
    at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub (Subscriber.js:195)
    at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next (Subscriber.js:133)
    at Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next (Subscriber.js:77)
    at Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next (map.js:41)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at XMLHttpRequest.onLoad (http.js:1055)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:3748)

1 个答案:

答案 0 :(得分:0)

您的for循环应为i < response.length,而不是<=


话虽如此,如果您只是推送到另一个数组,或者索引无关紧要,则不应使用for循环。至少使用for...of循环:更好的[].map(或者如果数组已经填充,则[].reduce带有起始值[或只是将它们组合起来。))

this.stockOpen = response.map(item => item.open);