Mam wdrożony singleton podążając za modelem opisanym w książce Addy Osmani Book, edukacja wzorów projektowania JavaScript.

Ten singleton konfiguruje połączenie mydło. Jest to wezwanie asynchroniczne i chcę wykonać, że w połączeniu Getinstance, więc można zagwarantować następujące połączenia, aby połączyć się całkowicie ...

Jedna myśl, że mam, to przejść w wywołaniu zwrotnym, aby uzyskać, wykonaj ten telefon w mojej funkcji Main.js iw czasem innym skryptom wymagają połączenia, pojawi się. I każdy inny konsument połączenia mydła, przekazuje go zerowanie wywołania zwrotnego.

Czy to jest hack lub dobry sposób na to? Jeśli to nie jest standardowy sposób robienia tego, co sugerujesz?

2
reza 19 listopad 2013, 21:20

2 odpowiedzi

Najlepsza odpowiedź

Podczas radzenia sobie z wydarzeniami, takimi jak XMLHTTPREQUEST (być mydłem lub JSON), jest to powszechne użycie funkcji wywołania zwrotnego.

Jednak korzystne jest korzystanie z obietnic. Obietnice są zaprojektowane tak, aby były biegły w kontaktach z asynchroniczną. Najważniejszą przewagą nad wywołaniami zwrotnymi jest to, że obietnice mają wbudowaną obsługę błędów, progresję i anulowanie rezerwacji.

Najpopularniejsze ramy i biblioteki obejmują wdrażanie obietnic.


Mniejsza uwaga: Singleton jako wzór projektu jest częściej, że nie, Anti-Water>. Bądź bardzo zmęczony podczas korzystania z niego, zwłaszcza w obliczu testów. Nie znam pracy Addy Osmani, więc nie mogę komentować tego konkretnego przypadku.

Pojęcie singletonu staje się mocne, gdy stosujesz dobre Wtrysk zależności .

2
Halcyon 21 listopad 2013, 13:58

Istnieje kilka sposobów na to:

  1. Uczyń cię singleton EventEmitter. Emituj wydarzenie ready lub initilized po zakończeniu inicjalizacji. Problem: Jeśli klient zaczyna słuchać po zainicjowaniu Singleton, nigdy nie złapie initialized wydarzenia. Możesz dodać initialized właściwość i ustawić go na true po zakończeniu inicjalizacji, aby umożliwić klientom sprawdzanie statusu obiektu. Nadal używasz go wymagać sprawdzenia statycznego właściwości .initialized, a następnie ustawianie słuchacza lub przejście od razu.

    1. Dodaj zwrotny do getInstance. Jeśli obiekt jest już zainicjowany, wywołanie zwrotne jest wywoływane na następnym znaczeniu.

    2. kolejkę wszystkie żądania przed zakończeniem inicjalizacji. Jest super konwencjonalny, ale także złożony do wdrożenia.

Przy okazji, nie używaj getInstance w Node.js, jest bardziej jak styl java. Tylko module.exports = new MyClass zrobi. W takim przypadku metoda nie ma zastosowania, jak jest, ale możesz reklama specjalnej metody, aby uzyskać takie połączenie, np. onReady().

1
vkurchatkin 19 listopad 2013, 20:44