Horizon/RethinkDB/Ionic2 无法读取未定义的 属性 "push"

Horizon/RethinkDB/Ionic2 cannot read property "push" of undefined

我遇到一个错误。我花了2天多的时间仍然没有解决方案... 我使用 Ionic2 作为前端,使用 Horizo​​n 和 RethinkDB 作为后端。我有一个名为 'messages' 的 table,里面只有几条消息。我只想获取所有这些消息并将它们显示在我的主页上。 这是我的代码:

import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';

declare var Horizon;


@Component({
  templateUrl: 'build/pages/home/home.html'
})
export class HomePage {
    test: any[];

  constructor(public navCtrl: NavController) {




  }

  getMessages(){
    let test = [];
    let hz = new Horizon({host: 'localhost:3100'});
    hz.connect();
    let messages = hz('messages');
    messages.watch().subscribe(messages => {
        for(let i = 0; i<messages.length; i++){
                console.log(messages[i].text);
                console.log(messages[i].id);
            this.test.push([{
                text: messages[i].text,
                id: messages[i].id
            }])
        }
    });
  }

}

我尝试了 this.test.push 的多种组合,但仍然没有成功。我做错了什么......希望你们能帮助我!

这个问题的答案只是确保引用您认为正在引用的变量。

this.test 未定义。您应该将 let test = []; 改为 this.test = [];,而不是 let test = [];

或者您可以将 this.test.push(... 更改为 test.push(...,它应该也可以正常工作。

在使用 this 时要小心并在 Javascript 中处理作用域是该语言中最棘手的部分之一。我希望错误中有一些指示器表明链中的哪一部分实际上是 undefined 正如你认为 .pushthis.test 上是 undefined 实际上它是 testthis 对象上未定义。