Array.push не является функциональной проблемой в ionic 4 Angular - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю с угловыми сервисами, которые называются сервисом устройств

import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';

const TOTAL_DEVICES = "TOTAL_DEVICES";

interface deviceInterface {
  ssid : String,
  name : String
}

interface devicesInterface {
  devices : Array<deviceInterface>  
}

@Injectable({
  providedIn: 'root'
})

export class DeviceService implements devicesInterface {

  devices : Array<deviceInterface>;

  constructor(private storage : Storage) { }

  addDevice(ssid : String, name : String){
    this.storage.get(TOTAL_DEVICES).then(res => {
      if (res) {        

        this.devices  = res;        
        console.log(this.devices);
        this.devices.push({ssid : ssid, name : name})  

      }else{
        let devices_obj : devicesInterface = { devices : [{ssid : ssid, name : name}] }
        this.storage.set(TOTAL_DEVICES,devices_obj).then(res => {
          console.log('device added');
        })
      }
    })
  }
}

Я внедряю этот сервис на страницу, а затем вызываю его функцию addDevice с правильными аргументами, которые все прекрасно работают, но во время выполнения при попытке добавитьустройство, с которым оно работает в первый раз, и первое устройство добавляется, в следующий раз, когда оно срабатывает, если условия, которые проверяют, существует ли массив, и пытаются добавить к нему путем нажатия на другой объект, он получает ошибку времени выполнения.

ОШИБКА Ошибка: Uncaught (в обещании): TypeError: _this.devices.push не является функцией

Я полностью застрял в этот момент IDE не показывает ни ошибки, ни компилятора.

1 Ответ

0 голосов
/ 24 февраля 2019

Вы получаете эту ошибку, потому что res не является массивом.Согласно вашему комментарию res объект со свойством массива с именем devices в нем.

Измените его на:

this.devices = res.devices 

Вы можете добавить интерфейс devicesInterface кпараметр обратного вызова, чтобы избежать подобных ошибок

this.storage.get(TOTAL_DEVICES).then((res: devicesInterface) => { ... })
...