我正在使用Ionic 2 Storage来保存表单数据。我保存了这样的数据:
this.storage.set(key, JSON.stringify(formData));
我检索并尝试更新这样的数据:
this.getReport(key).then((report) => {
var objReport = JSON.parse(report);
objReport.push(data); //this is the problem
this.storage.set(pk, JSON.stringify(objReport));
});
getReport就是这样:
getReport(key) {
return this.storage.get(key);
}
所以我知道.push是针对数组而不是对象,但我不认为执行所有这些转换是有效的,因为我正在处理大型对象。
我的问题是:从存储中检索json并附加到它的最有效方法是什么?如果对象没有像数组这样的推送方法,那么.parse返回一个对象是没有意义的。
这是错误:
运行时错误未捕获(在承诺中):TypeError:无法读取属性 '推'未定义的TypeError:无法读取属性' push'的 未定义
答案 0 :(得分:0)
此错误的含义是,此时此键没有记录。 所以,你必须做这样的检查:
this.getReport(key).then((report) => {
var objReport = [];//initialise empty Array
if(report){ //if there is a record in that key location
objReport = JSON.parse(report); //parse the record & overwrite objReport
}
objReport.push(data); //Now this push will happen regardless of report or not
this.storage.set(pk, JSON.stringify(objReport));
});