代码之家  ›  专栏  ›  技术社区  ›  infodev

将同步映射方法转换为异步跟踪

  •  1
  • infodev  · 技术社区  · 6 年前

    我有大量的数据要转换成新的格式。

    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 回复  |  直到 6 年前
        1
  •  1
  •   Osama    6 年前

    像这样使用async和await关键字

    async getDataFormatted(){     return(cmtAllRawdataDB[0].rows.map(elm => new Message(elm, configResult)));
    }
    
    let dataFormatted= await getDataFormatted();
    
        2
  •  2
  •   Akash Salunkhe    6 年前

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

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