将同步Map方法转换为异步特征

时间:2018-10-23 09:17:16

标签: javascript asynchronous promise async-await

我有大量的数据可以转换为新格式。

实际上我正在使用map方法,但是它是同步的,并且会影响性​​能。

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

是否可以异步运行此代码?

2 个答案:

答案 0 :(得分:1)

只需将此操作放入函数中,并将其放入settimeout方法中,只需10毫秒

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

答案 1 :(得分:1)

以这种方式使用async和await关键字

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

let dataFormatted= await getDataFormatted();