我在使用带有来自GET请求的大数据的jsstore时遇到问题。所以对于初学者来说,我收到一个超过9000+ json的数组,我需要将它们存储在jsstore中以实现持久性(为了避免对大数据的多个GET请求)。在这样做的过程中,我遇到了一个没有及时解决的问题。
这位于我的authService中
async getData() {
this.loadToken();
const headers = new HttpHeaders({
'Content-type': 'application/json',
'Authorization': 'Bearer ' + this.authToken
});
const data = this.http.get(this.ROUTE, {headers: headers})
.pipe(map(res => res));
return await data.subscribe((vals: any) => {
return this.storeDataInDB(vals.data);
}, err => {
console.log(err);
return false;
});
}
async storeDataInDB(data) {
return await this.DBService.storeData(data);
}
这是在我的DBService中
async insert(data: any) {
return await this.connection.insert({
into: this.tableName,
return: false,
values: data
}).then(function(rowsInserted) {
if (rowsInserted > 0) {
console.log('Successfully added all records!');
}
}).catch(function(err) {
console.log(err);
});
}
这是我从jsstore收到的错误。我知道这是由于我之前遇到的类似问题而无法及时解决的问题。
消息:“列'unit_number'不允许空值”类型:“null_value”
我此刻尝试了很多东西,我不知道该怎么做。
我建议尽快将promises转换为observable。混合搭配可能令人困惑。我不认为数据的大小应该重要,除非你得到某种超时?
也许试试这个:DBService
insert(data: any) {
return fromPromise(this.connection.insert({
into: this.tableName,
return: false,
values: data
}));
}
authService
getData() {
this.loadToken();
const headers = new HttpHeaders({
'Content-type': 'application/json',
'Authorization': 'Bearer ' + this.authToken
});
this.http.get(this.ROUTE, {headers: headers})
.pipe(
tap(vals => console.log(vals)),
switchMap(vals => this.DBService.storeData(vals.data)),
tap(rowsInserted => console.log(rowsInserted)),
).subscribe(rowsInserted => console.log(rowsInserted), err => console.log(err));
}
错误消息 - {message:“列'unit_number'不允许空值”类型:“null_value”}表示 - 列unit_number的数据中存在空值,并且您在数据库模式中添加了notNull。
如果您想跳过数据检查以插入数据,您可以将skipDataCheck与您的插入查询一起使用,如果您愿意,可以使用api bulkInsert
-
connection.insert({
into: this.tableName,
return: false,
skipDataCheck:true,
values: data
})
有关更多信息,请查看插入api - http://jsstore.net/tutorial/insert/。