Преобразовать синхронный метод Map в асинхронную черту - PullRequest
0 голосов
/ 23 октября 2018

У меня огромное количество данных для преобразования в новый формат.

На самом деле я использую метод карты, но так как он синхронный и влияет на производительность.

dataFormatted = cmtAllRawdataDB[0].rows.map(elm => new Message(elm, configResult));

Для информации *Класс 1006 * имеет глобально этот формат:

export class Data {
  public value: string;
  public date: Date;
  constructor(dbData) {
    this.value = '123';
  }
}

export class Measure {
  public name: string;
  public unit: string;
  public data: Data[];
  constructor(config, dbData) {
    this.name = config.name;
    this.unit = config.value;
    ...
    this.data = [new Data(dbData)];
  }
}

export class Sensor {
  public id: string;
  public label: string;
  public measures: Measure[] = [];
  constructor(dbData, config) {
    this.id = '123';
    this.label = 'SensorType';
    config.unitConfig.map(elm => this.measures.push(new Measure(elm, dbData)));
  }
}

export class Message {
  public id: string;
  ...
  public sensors: Sensor[];
  constructor(dbData: any, config: any) {
    this.id = dbData.value._id;
    ....
    this.sensors = [new Sensor(dbData, config)];
    console.log(this.id, this.arrivalTimestamp);
  }
}

Есть ли способ запустить этот код асинхронно?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Используйте асинхронные и ожидайте ключевые слова, как это

async getDataFormatted(){     return(cmtAllRawdataDB[0].rows.map(elm => new Message(elm, configResult)));
}

let dataFormatted= await getDataFormatted();
0 голосов
/ 23 октября 2018

Просто поместите эту операцию внутри функции и поместите ее в метод settimeout, всего за 10 миллисекунд

var example = () => {
  setTimeout(() => {
    return (dataFormatted = cmtAllRawdataDB[0].rows.map(
      elm => new Message(elm, configResult)
    ));
  }, 10);
};
...