Wpis z mikrobloga

#javascript #ajax #naukaprogramowania głupia sprawa. Django pod url'em /fakty wyrzuca mi JSON z linkami do galerii zdjęć. Ajax call do JSON'a jest wykonywany najpierw, po czym w kodzie poniżej wypisujemy cały array (fantastyka) oraz jedno ze zdjęć ma podmieniane źródło na link z tego array'u. Oczywiście Ajax jest asynchroniczny, więc w momencie gdy przeglądarka wykonywuje drugą część kodu , to dane nie zdążyły jeszcze wrócić do zmiennej var fantastyka i nic się nie dzieje. Zastanawiam się co teraz zrobić najlepiej. Ustawić jakieś window.onload() dla pozostałych funkcji albo dać im jakieś opóźnienie ?
Pobierz J.....L - #javascript #ajax #naukaprogramowania głupia sprawa. Django pod url'em /fak...
źródło: comment_B4leLu18nVUCUARO84jWDcGSzqZa20yK.jpg
  • 14
@asdfghjkl: faktycznie. Galeria zdjęć, którą projektuję ma 3 widoczne zdjęcia (reszta ładowana przy zrobieniu slide'u) więc spróbuję do tych img tagów od razu przyporządkować linki w funkcji success, potem będę myślał.
@JungleJamPL: Ogólnie to taki jeden z większych mindfucków jeśli wchodzisz w JS, kiedy zauważasz, że kod napisany od góry do dołu nie wykonuje się w pożądanej kolejności. W tym języku jest podejście jak już wyżej wspomniano, callbackowe - reagujesz na zdarzenia, w tym wypadku jest to zdarzenie otrzymania odpowiedzi z serwera. Jak ogarnąć takie sekwencyjne działania i się nie zgubić? Najprościej z wykorzystaniem Promise właśnie, który występuje też w postaci lukru
@magic96: promise świetnie się sprawdza. Tylko co najciekawsze funkcja .json() która normalizuje dane sama zwraca promise, więc żeby odzyskać dane z API trzeba dwa razy skorzystać z metody .then() Teraz chciałbym odebrać dane z kilku API , i na kazde API ma być generowana nowa instancja obiektu głównego. Chciałbym żeby w zależności od rodzaju API jaki był wywołany łapać dedykowany mu DIV w html'u co samo w sobie nie jest problemem,
Pobierz J.....L - @magic96: promise świetnie się sprawdza. Tylko co najciekawsze funkcja .jso...
źródło: comment_NsdEfxcjBWVYSLUBuQrrfOubVFuwJ2uA.jpg
@JungleJamPL: najfajniejszą i jedną z fundamentalnych cech promisów jest to, że można je chainować, tj. łączyć:

fetch('url').then(response => response.json()).then(jsonData => { console.log(jsonData); });
Trochę skomplikowałeś opis działania, keep it simple, stupid ( ͡° ͜ʖ ͡°)
@JungleJamPL:
odniosłem to do tego:

Tylko co najciekawsze funkcja .json() która normalizuje dane sama zwraca promise, więc żeby odzyskać dane z API trzeba dwa razy skorzystać z metody .then()