Проблема в том, что у вас круговая зависимость . Другой файл требует index
, index
требует Transaction
, а Transaction
требует index
. Таким образом, при запуске transaction
он пытается запросить index
, , модуль которого уже находится в процессе сборки . index
еще ничего не экспортировал, поэтому требование в это время приводит к пустому объекту.
Поскольку оба должны вызывать друг друга, один из способов решить эту проблему - собрать оба класса вместе и экспортировать их оба:
// index.js
class Context {
constructor(uid) {
if (typeof uid !== "string") throw new TypeError("uid must be a string.");
this.uid = uid;
}
runTransaction(operator) {
return new Promise((resolve, reject) => {
if (typeof operator !== "function")
throw new TypeError(
"operator must be a function containing transaction."
);
operator(new Transaction(this));
});
}
}
class Transaction {
constructor(context) {
// check type
if (!(context instanceof Context))
throw new TypeError("context should be type of Context.");
this.context = context;
this.operationList = [];
console.log("successfully constructed transaction");
}
addOperation(operation) {}
}
module.exports = { Context, Transaction };
и
const { Context, Transaction } = require("./index");
const context = new Context("some uid");
context.runTransaction(transaction => {});
https://codesandbox.io/s/naughty-jones-xi1q4