Pracuję nad projektem angularJs i maszynopisu. Muszę wykonać synchroniczne wywołanie http i pobrać dane z serwera przed uruchomieniem aplikacji klienckiej i załadowaniem interfejsu użytkownika. Szukam w Internecie i widzę, że wszyscy mówią o obietnicy, huumm okej, czemu nie. Używam więc obietnicy (wykonaj $ HTTP call i użyj $ q, aby zwrócić obietnicę) w moim app.run(). Może niczego nie brakuje, bo to w ogóle nie działa. Angularowe uruchomienie app.config(), a następnie app.run(), ... Ale Angular nie czeka app.config() na zakończenie przed uruchomieniem app.run(). Tak więc, moja pierwsza obietnica to uruchomienie w app.run() i zanim ona rozwiązuje Angulara, spróbuj utworzyć instancję kontrolera ... Nie chcę tworzyć nowego połączenia usługi httpSynchronous, ale nie mam żadnych innych pomysłów.Obietnica AngularJS w app.run()
Odpowiedz
Kątowy nie obsługuje asynchronicznych akcji w funkcjach .config
i .run
. Jeśli chcesz opóźnić swoje zgłoszenie, możesz to zrobić na dwa sposoby:
- Pierwszym z nich jest opóźnienie całej aplikacji za pomocą metody angle.bootstrap() w celu ręcznego uruchomienia. Ale wszystko, co robisz, jest poza zakresem, więc nie masz dostępu do niczego oprócz wanilii JavaScript.
- Drugi to użycie właściwości resolve twoich tras. Jeśli używasz routera takiego jak angular route segment lub ui router, możesz określić górną trasę/stan z rozwiązaniem, które zostanie rozwiązane po załadowaniu aplikacji (i jeśli wymusisz pełne przeładowanie trasy).
Dziękuję za odpowiedź, ale nie mogę użyć pierwszego rozwiązania, ponieważ muszę wykonać wielokrotne wywołanie http i zainicjować składnik angularJs (usługa, dyrektywa, ...), więc to rozwiązanie będzie bardzo brzydkie. I już widzę to rozwiązanie w Internecie, ale umieszczenie całej tej logiki w definicji mojej trasy nie jest właściwą drogą. Resolve służy do rozstrzygania usług dla kontrolera i nie jest to moim celem. –
Tak, też bym tego nie zrobił. Ale wciąż jest to możliwe;) –
@Tonkar rozwiązać może być używane dla wielu rzeczy –
- 1. Dokumentacja AngularJS app.run()?
- 2. Zatrzymywanie angularjs łańcuch obietnica
- 3. Obietnica w sprawie akcji oszczędzania zasobów AngularJS
- 4. Obietnica AngularJS zostaje rozwiązana przed załadowaniem danych.
- 5. Co oznacza "app.run (host =" 0.0.0.0 ') "w Flask
- 6. Obietnica AngularJS nie jest rozwiązywana wielokrotnie przy użyciu przedziału czasowego
- 7. Obietnica oczekiwaniu
- 8. $ q obietnica z podkreśleniem _each
- 9. obietnica javascript Firebase w NodeJS
- 10. "Obietnica" jest niezdefiniowana w IE
- 11. $ obietnica obietnicy http działającej w złej kolejności
- 12. Obietnica JavaScript wtedy() zamawianie
- 13. ES5 vs ES6 Obietnica
- 14. Obietnica usług granicznych
- 15. Typ obietnica typ rodzajowy
- 16. Obietnica wewnątrz obietnicy
- 17. maszynopis Obietnica TS2304 TS2529
- 18. W jaki sposób jedna obietnica z sinonem?
- 19. Unhandled odrzucenie obietnica w asynchronicznych obietnic
- 20. Jak używać mangusty Obietnica - mongo
- 21. Oprawa funkcji obsługi obietnica obiektu
- 22. Jasmine unit test Fabryka AngularJS z dwiema zależnościami ($ http i kolejna obietnica zwrotu fabryki)
- 23. Jak mogę transmitować obiekt w Angularjs?
- 24. powiązać `this` zakres funkcji obietnica zwrotnej
- 25. Asynchronous JavaScript - oddzwaniania vs Odroczony/Obietnica
- 26. coffeescript obietnica łańcuchowa z definicją funkcji
- 27. Webstorm mówi: Obietnica to nierozwiązany typ:
- 28. jQuery Obietnica wtedy nie działa po AJAX
- 29. Obietnica zwrotna nie nazywa się Kątowymi JS
- 30. błąd TS2304: Nie można znaleźć nazwy "Obietnica"
Zaktualizuj za pomocą kodu: D – Seth
Czy możesz przenieść synchroniczne wywołanie http do pliku app.run? Następnie możesz użyć swojego kodu, który zależy od wyniku w bloku sukcesu. –