Преобразовать синхронный метод Map в асинхронную черту

1

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

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

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

Для информации Класс Message имеет глобальный формат:

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);
  }
}

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

Теги:
async-await
asynchronous
promise

2 ответа

1
Лучший ответ

Используйте async и ожидайте ключевые слова таким образом

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

let dataFormatted= await getDataFormatted();
  • 0
    Я пытаюсь интегрировать ваше решение в мою программу. фактически dataFormatted = cmtAllRawdataDB[0].rows.map(elm => new Message(elm, configResult)); уже находится внутри функции (асинхронная функция)
  • 0
    let dataFormatted = await getDataFormatted (); Только поместите эту строку в вашу основную функцию
1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню