Array.push在ionic 4 Angular中不是函数问题

时间:2019-02-23 21:17:23

标签: javascript angular typescript ionic-framework interface

我正在使用称为设备服务的角度服务

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函数,这些参数都可以正常工作,但是在尝试添加设备时在运行时首次使用该设备,下次添加了第一个设备当它达到检查数组是否存在的条件,并尝试通过推入另一个对象附加到该数组时,它将收到运行时错误。

错误错误:未捕获(承诺):TypeError:_this.devices.push不是函数

这时我完全陷入困境,两个编译器都未显示错误。

1 个答案:

答案 0 :(得分:2)

由于res不是数组,因此出现此错误。根据您的评论,res中包含一个名为devices的数组属性的对象。

将其更改为:

this.devices = res.devices 

您可以将devicesInterface接口添加到回调参数中以避免此类错误

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