Можно ли указать последний экземпляр в шаблоне Singleton? (ДС) - PullRequest
0 голосов
/ 03 октября 2019

Объяснение

У меня есть база данных 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');
    }
}
...