如何将json数据正确分配到javascript类中?

时间:2018-08-23 00:49:41

标签: node.js asynchronous

我无法使for循环内的函数同步运行

内部EmployeePrint.js

fillData(item, taxObj) {
        let fullName = item.getFullName();
        let timePeriod = item.getTimePeriod();
        let grossIncome = item.getGrossIncome();
        let incomeTax = item.getIncomeTax(taxObj);
        let netIncome = item.getNetIncome();
        let mySuper = item.getSuper();

        this.name = fullName;
        this.payPeriod = timePeriod;
        this.grossIncome = grossIncome;
        this.incomeTax = incomeTax;
        this.netIncome = netIncome;
        this.mySuper = mySuper;

        return this;
    }

项目是员工对象。它有一些方法,我在fillData中运行它

async print(arr, fileName, taxObj) {
        let buf = [];

        arr.map(async (item) => {
            let ep = new EmployeePrint();
            ep = ep.fillData(item, taxObj);
            buf.push(ep);
        });

        return await this.printPromise(buf, fileName);
    }

在填充数据之后,我将员工对象推入数组以供稍后打印。

我的问题是我不知道如何确保每次迭代都完成所有功能。

此处的完整项目:https://github.com/kenpeter/mb_new/tree/extend_base

1 个答案:

答案 0 :(得分:0)

对于初学者来说,您应该调用forEach并推入buf,或者只使用map的返回值,甚至不创建buf。

第二,如果要在循环中等待(而不是map或forEach),或者仅映射到promises并等待所有,则应使用for循环。

async print(arr, fileName, taxObj) {
  let buf = [];

  const promises = arr.map((item) => {
    let ep = new EmployeePrint();
    ep = ep.fillData(item, taxObj);
    buf.push(ep);
    return this.printPromise(buf, fileName);
  });
  await Promise.all(promises)
}