Javascript 如何在循环内声明类副本

Javascript 如何在循环内声明类副本,javascript,node.js,Javascript,Node.js,我有一个每分钟运行一次的应用程序来分析一个商店的产品,首先我创建了一个包含5个商店的数组,每个商店都有它的销售额,每个销售额都有它的产品。为了开始分析,我创建了一个forEach,它在所有的商店中运行,因为我希望5并行执行,在该forEach中我执行一个for sales,在该forEach中我声明了一些模块,并调用正在销售的方法作为参数,在这些模块中,我为销售产品执行另一个模块,该循环实例化了其他模块和类,当我第一次和/或第二次执行时,它正常工作,经过多次迭代后开始出错,例如,在store 1

我有一个每分钟运行一次的应用程序来分析一个商店的产品,首先我创建了一个包含5个商店的数组,每个商店都有它的销售额,每个销售额都有它的产品。为了开始分析,我创建了一个forEach,它在所有的商店中运行,因为我希望5并行执行,在该forEach中我执行一个for sales,在该forEach中我声明了一些模块,并调用正在销售的方法作为参数,在这些模块中,我为销售产品执行另一个模块,该循环实例化了其他模块和类,当我第一次和/或第二次执行时,它正常工作,经过多次迭代后开始出错,例如,在store 1的sale 123中,它使用store 2 sales 231使用的属性

我不知道您是否能理解这个问题,但解释起来有点混乱,基本上我希望每个循环迭代都使用模块/类的副本,而不更改其他迭代的属性,如果我在迭代1中声明Sales类,在迭代2中也声明相同的类,此迭代无法接收迭代1的属性。简言之,我想为每个迭代实例化一个类/模块,而不改变彼此的属性

这是我尝试使用对象数组来存储类/模块的实例:

main.js

const analysis = require('./modules/analysis');
const check = require('./modules/check');
const api = require('../wrappers/api');

stores.forEach(async function(store) {
    let sales = [];
    await api.getSales(store.id).then((response) => {
      sales = response.result;
    })
    .catch((error) => {
      logger.error(error);
    });

    let analysisModule = {};
    let checkModules = {};

    for(const sale of sales){
         // Analysis
         analysisModule[sale.id] = Object.assign({}, analysis);
         await analysisModule[sale.id].run(sale);
         delete analysisModule[sale.id];

         // Check
         checkModules[sale.id] = Object.assign({}, check);
         await checkModules[sale.id].run(sale);
         delete checkModules[sale.id];
    }
});
const Stock = require('./stock');
const Provider = require('./provider');
const api = require('../wrappers/api');
const common = require('./common');

const check = {
    run: async function(sale) {
        var self = this;
        let items = await api.getItems(sale.id, 1);
        if (!items.success && items.result.lenght == 0) {
            return false;
        }

        let providerClass = {};
        let stockClass = {};

        for (const item of items.result) {

            // Here is problem
            providerClass[item.id] = await new Provider(sale, item);
            let allowed = await providerClass[item.id].check();
            if (!allowed) {
                continue;
            }

            // Here is problem
            stockClass[item.id] = new Stock(sale, item);
            let checked = await stockClass[item.id].check();
            if (checked) {
               continue;
            }

            delete providerClass[item.id];
            delete stockClass[item.id];
        }
    }
}
检查.js

const analysis = require('./modules/analysis');
const check = require('./modules/check');
const api = require('../wrappers/api');

stores.forEach(async function(store) {
    let sales = [];
    await api.getSales(store.id).then((response) => {
      sales = response.result;
    })
    .catch((error) => {
      logger.error(error);
    });

    let analysisModule = {};
    let checkModules = {};

    for(const sale of sales){
         // Analysis
         analysisModule[sale.id] = Object.assign({}, analysis);
         await analysisModule[sale.id].run(sale);
         delete analysisModule[sale.id];

         // Check
         checkModules[sale.id] = Object.assign({}, check);
         await checkModules[sale.id].run(sale);
         delete checkModules[sale.id];
    }
});
const Stock = require('./stock');
const Provider = require('./provider');
const api = require('../wrappers/api');
const common = require('./common');

const check = {
    run: async function(sale) {
        var self = this;
        let items = await api.getItems(sale.id, 1);
        if (!items.success && items.result.lenght == 0) {
            return false;
        }

        let providerClass = {};
        let stockClass = {};

        for (const item of items.result) {

            // Here is problem
            providerClass[item.id] = await new Provider(sale, item);
            let allowed = await providerClass[item.id].check();
            if (!allowed) {
                continue;
            }

            // Here is problem
            stockClass[item.id] = new Stock(sale, item);
            let checked = await stockClass[item.id].check();
            if (checked) {
               continue;
            }

            delete providerClass[item.id];
            delete stockClass[item.id];
        }
    }
}

像这样的
let copy=JSON.parse(JSON.stringify(original))
但是我可以使用这个类的方法吗?问题是我有一个构造函数,我需要在上面传递参数,它看起来怎么样?
for(item of items.result){
缺少一个
常量
/
/
变量
声明。总是使用严格模式来捕捉此类错误!顺便说一句,您应该只使用
常量sales=(wait api.getSales(store.id)).result;
.No
然后
。好吧,这不是问题,问题是它没有为每个迭代声明一个类,如果我修改在迭代2中声明的类,那么在迭代1中声明的类的属性也会被修改,明白吗?类似这样?
让copy=JSON.parse(JSON.stringify(原件)
但是我可以使用类的方法吗?问题是我有一个构造函数,我需要在它上面传递参数,它看起来怎么样?
for(items of items.result){
缺少一个
const
/
let
/
var
声明。请始终使用严格模式捕获此类错误!顺便说一句,您应该只使用
const sales=(等待api.getSales(store.id)).result;
.No
然后
。好的,这不是问题,问题是它没有为每个迭代声明单个类,如果我修改在迭代2中声明的类,那么在迭代1中声明的类的属性也会被修改,明白吗?