我正在使用称为设备服务的角度服务
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不是函数
这时我完全陷入困境,两个编译器都未显示错误。
答案 0 :(得分:2)
由于res
不是数组,因此出现此错误。根据您的评论,res
中包含一个名为devices
的数组属性的对象。
将其更改为:
this.devices = res.devices
您可以将devicesInterface
接口添加到回调参数中以避免此类错误
this.storage.get(TOTAL_DEVICES).then((res: devicesInterface) => { ... })