Хранение больших объемов данных из запроса GET в Angular с использованием jsstore - PullRequest
0 голосов
/ 25 февраля 2019

У меня проблема с использованием jsstore с большими данными из запроса GET.Итак, для начала я получаю массив более 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»

Я уже столько раз пробовал, я понятия не имею, что делать.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Сообщение об ошибке - {message: «Нулевое значение недопустимо для столбца« unit_number »» type: «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/.

0 голосов
/ 25 февраля 2019

Я рекомендую преобразовать обещания в наблюдаемые как можно скорее.Сочетание и совпадение может сбивать с толку.Я не думаю, что размер данных должен иметь значение, если вы не получаете какое-то время ожидания?

Может быть, попробуйте это: 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));
}
...