我有一个应用程序,它每分钟运行一次以分析商店的产品,首先,我创建了一个包含5个商店的数组,每个商店都有自己的销售额,每个销售额都有自己的产品。因此,为了开始分析,我创建了一个在所有商店中运行的forEach,因为我希望并行执行5,在forEach中我执行一个sales,在其中声明一些模块并调用销售中的方法。作为参数,在这些模块中,我对要销售的产品执行另一个,并且此循环实例化其他模块和类,当我第一次和/或第二次执行该代码时,它会正常工作,例如经过多次迭代后,例如商店1的销售123,它使用商店2的销售231使用的属性。
我不知道您是否能理解这个问题,但是这有点令人困惑,基本上,如果我声明了Sales,我希望每个循环迭代使用模块/类的副本而不更改其他迭代的属性。迭代1中的类,并且在迭代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];
}
});
check.js
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];
}
}
}