Невозможно получить значение массива в переменной - угловой - PullRequest
0 голосов
/ 11 октября 2018

Краткое объяснение: Я получил результат в переменной res, используя **js**.

Результат res на консоли показан ниже.

см. Здесь

Требование: Я хочу получить значение res в угловой переменной.Я объявил

resarry = [];

Когда я сделаю

this.resarry = res;
console.log(this.resaary);

Ошибка при поступлении - Невозможно установить свойство 'resarray` undefined.

console.log(results); // no problem in this line console.log(this.resarry); // giving error

export class HomePage {
resarry = [];


constructor(){
     var connection = new JsStore.Instance();
              var dbName = 'Demo';
          connection.openDb(dbName);

          connection.select({
            from: Test1,
          }).then(function(res) {
         // results will be array of objects

            console.log(res,'results');
            this.resarry = results;
console.log(results); // no problem in this line
console.log(this.resarry); // giving error

          }).catch(function(err) {
            console.log(err, 'error');
            alert(err.message);
        });

}
}

Ответы [ 5 ]

0 голосов
/ 11 октября 2018

Функции стрелок пользователя, а также типы машинописи для проверки правильности перед назначением

export class HomePage {
    resarry: any[] = []; //--> resarry: any[] -> used to set the type as array
    constructor() {
        let connection = new JsStore.Instance(); //-> use Let insted of Var
        let dbName = 'Demo';
        connection.openDb(dbName);
        connection.select({
            from: "Test1",
        }).then(res => {
            console.log(res);
            if (res)
                if (res.length > 0){
                    this.resarry = res;
                    console.log(this.resarry);
                    console.log("connection Successful with array objects");
                }else{
                    console.log("connection Successful  without array objects");
                }
        }), err => {
            console.log("connection error");
        };

    }
}
0 голосов
/ 11 октября 2018

Потому что «this» означает текущий объект функции.Так что «это», которое вы использовали в конструкторе, не является действительным компонентом

Используйте функцию стрелки или

constructor(){
     var connection = new JsStore.Instance();
              var dbName = 'Demo';
          connection.openDb(dbName);
     var $this = this;
          connection.select({
            from: Test1,
          }).then(function(res) {
         // results will be array of objects

            console.log(res,'results');
            $this.resarry = results;
console.log(results); // no problem in this line
console.log($this.resarry); // giving error

          }).catch(function(err) {
            console.log(err, 'error');
            alert(err.message);
        });

}
0 голосов
/ 11 октября 2018

Изменение:

connection.select({
  from: Test1,
}).then(function(res) {
  // ...
});

на:

connection.select({
  from: Test1,
}).then(res => {
  // ...
});

По существу, function() { ... } не может получить доступ к this из внешней области видимости, в то время как функции стрелок могут.Более подробное объяснение можно найти здесь .

Кроме того, стрелки функций 'документы .

0 голосов
/ 11 октября 2018
connection.select({
         from: Test1,
      }).then(function(res) { // results will be array of objects
        console.log(res,'results');
        this.resarry = results; //  perhaps like that => this.resarry = res
        console.log(results); // i think, you should have an error on this line because **results** isn't a variable but a string in your console
        console.log(this.resarry); // giving error

      })
0 голосов
/ 11 октября 2018
resarry:number[] = new Array();

инициализирует пустой массив, который не является неопределенным.

Вы можете установить тип, в котором ожидаемый результат будет.

...