使用jsstore在Angular中存储来自GET请求的大量数据

问题描述 投票:0回答:1

我在使用带有来自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”

我此刻尝试了很多东西,我不知道该怎么做。

angular typescript observable
1个回答
0
投票

我建议尽快将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));
}

0
投票

错误消息 - {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/

© www.soinside.com 2019 - 2024. All rights reserved.