Объяснение
У меня есть база данных singleton , называемая Terminal
, которая получает каждый objects
от разных классов. Класс singleton, Terminal
, продолжает выполняться другими классами всякий раз, когда он получает их objects
каждый раз.
Если я опишу процесс как дорожную карту, он будет выглядеть так:
{класс A} -> | передать объект | -> [вызвать терминал -> создать экземпляр, если его нет -> сохранить объект там] ->
{класс B} -> | передать объект | -> [вызвать терминал -> сохранить объект в экземпляре] ->
{класс C} -> | передать объект | -> [вызвать терминал -> сохранитьобъект к экземпляру]
Проблема
Проблема в том, что я могу вызвать first instance
только после того, как первый цикл выполнен на всей временной шкале синглтон-класса.
Это результат на панели консоли:
[ Button { type: 'submit', color: 'orange' } ] 'from constructor' // A moment after fist loop has done
// I can't call the other moments of instances except this one on the constructor level.
Terminal {
cache:
[ Button { type: 'submit', color: 'orange', input: Promise {} },
Slider { category: 'landscape', sort: 12 } ] } 'from initialize' // second loop has done.
Terminal {
cache:
[ Button { type: 'submit', color: 'orange', input: Promise {} },
Slider { category: 'landscape', sort: 12, input: Promise {} },
Gallery { location: 'YSNP', years: '2019' } ] } 'from initialize' // last loop has done.
// I want to call this moment of instance on the constructor level.
// Please ignore the promises
// I added extra breaks between every logs for dividing. There's no breaks in the real code.
Теперь мы знаем, что instance
вызывается 3 раза за сценой. Но, как я уже сказал, единственное instance
, которое я могу вызвать внутри конструктора на этой временной шкале, - это first instance
независимо от того, сколько я верну за сохранение objects
.
Всего
Вопрос в том, есть ли способы указать last instance
в Синглтоне? (в тот момент, когда завершился последний цикл.)
Я прикреплю ссылку на мой полный код на здесь , чтобы выглядела лучше и понятнее. Пожалуйста, извините за это.
Это код:
export default class Terminal {
static async init(temp) {
/* #1 Define Variable */
this.temp = temp;
/* #2 Singleton */
if (!Terminal.ins) {
Terminal.ins = new Terminal(this.temp);
return;
}
/* #3 Re-assign this.temp */
this.temp = Terminal.ins.cache;
/* #4 Push next temp parameter */
this.temp.push(temp);
this.momentCatcher(Terminal.ins, 'from initialize');
return Terminal.ins;
}
static momentCatcher(instance, text) {
return console.log(instance, text);
}
constructor(data) {
/* #2-1, #4-1 Define an array */
this.cache = [];
/* #2-2, #4-2 Push every data from Terminal.init */
this.cache.push(data);
Terminal.momentCatcher(this.cache, 'from constructor');
}
}