我有一个对象数组,我循环检查每个项目,此检查是由一个称为“检查”的单独模块完成的,我使用require将这个模块从循环中导入,但是问题是,如果我在该模块中进行更改,它将更改为实例化它的所有迭代。我读到,使用require()节点导入会缓存该模块,因此我所做的任何更改都会对每个人都更改,而这不是我想要的。
每次迭代我都需要一个模块副本,这可能吗?无论如何我都尝试过,我在循环外创建了一个对象,并在对象内声明了它,但是它不起作用。
这是我的尝试:
main.js
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 checkModules = {};
for(const sale of sales){
// Check
checkModules[sale.id] = Object.assign({}, check);
await checkModules[sale.id].run(sale);
delete checkModules[sale.id];
}
});
也许问题出在异步的forEach上,它运行并行存储并最终导致模块错误,如果我一次执行一个可以工作,但是我需要并行运行forEach,因为此循环需要一段时间完成。