[node.js ]Jak zwrocic zmienna z callback?

[node.js ]Jak zwrocic zmienna z callback?
PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0

Witam wszystkich

Potrzebuje pobrac i przetworzyc plik po http. Pobrac i wyswietlic plik mi sie udalo, ale nie mam pojecia jak przekazac zawartosc tego pliku poza callback. Probowalem uzyc funkcji wewnatrz ktorej pobralem plik, a nastepnie zwrocic ten plik, ale nie udalo sie. Jak sie do tego zabrac? Najgorsze jest to, ze wiekszosc przykladow w necie odnosnie roznych zagadaniec uzywa callback i utknalem na tym.

Kopiuj
var request = require('request');
request.get('http://IP/list.json', function (error, response, body)
{
    if (!error && response.statusCode == 200)
	{
        var json = body;
        // Continue with your processing here.
		console.log(json);
		return json;
    }
});
edytowany 1x, ostatnio: Paweleczek
mr_jaro
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Grudziądz/Bydgoszcz
  • Postów:5300
3

Nie przekażesz poza callback bo callback wykonuje się asynchronicznie, kod wkoło już się dawno wykonał dopiero wykonuje się callback. Musisz nauczyć się myśleć asynchronicznie by robić cokolwiek w js.


It's All About the Game.
PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0

Dopiero co znalazlem lopatoligiczne wytlumaczenie co to jest ten callback i zgadza sie z tym co napisales. Widac, ze javascript bedzie wymagal zmiany przyzwyczajen.
https://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm

To mam takie pytanie zwiazane z tym podejsciem.
Zalozmy, ze klient wysyla zapytanie do serwera zrobionego przy uzyciu node.js. Node.js zanim odpowie, musi pobrac jakis plik i dopiero po przetworzeniu, moze zwrocic plik do klienta. Jak w takim razie cos takiego zrobic? Skoro skrypt dojdzie do funkcji zwracajacej dane do klienta, to co mi z callback-a, skoro skrypt sie juz zakonczyl?
Przeciez callback nie bedzie wiedzial komu zwrocic te dane, skoro polaczenie sie zakonczy. A moze bedzie wiedzial?

stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 19 godzin
1

Nie lepiej async/await?


λλλ
Riddle
Inna składnia na ten sam koncept
mr_jaro
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Grudziądz/Bydgoszcz
  • Postów:5300
0

@stivens niech się nauczy podstaw, zresztą do tej pory async/await nie jest jakoś często stosowane bo i czemu by marnować to co jest naturalne dla js?

Autorze wątku, nie kumam co chcesz zrobić :) Rozpisz to jakoś po ludzku.


It's All About the Game.
edytowany 1x, ostatnio: mr_jaro
stivens
No gosc chce zrobic await :D
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 19 godzin
0

console.log(json); - zamiast console.log napisz kontynuacje po prostu


λλλ
BraVolt
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Warszawa
  • Postów:2918
1

@Paweleczek: Wynik przekazujesz nie 'z callback' ale w callback definiujesz co ma być zrobione przez ten callback z wynikiem kiedy będzie on już dostępny.

@stivens
async/await to Promise i resolve/reject a nie prosty callback - kto nie rozumie callback nie zrozumie ani Promise ani syntactic sugar async/await

@Paweleczek
Co się dzieje po wywołaniu callback?
Zacznij od


"Kiedy wiedzieć czy zacząć nauke Springa? bo w czystej Javie to nic ciekawego nie zrobie chyba"
Ein Volk, ein Reich, ein Kwa-Kwa ***** ***
edytowany 1x, ostatnio: BraVolt
stivens
Ale kod z async/await wyglada jak synchroniczny tylko ze ma taski w backgroundzie i blokowanie. Moze nie zrozumie ale bedzie umial uzyc.
BraVolt
Dokładnie z tego powodu "Moze nie zrozumie ale bedzie umial uzyc" jestem na nie kiedy ktoś dopiero będzie się tego uczyć.
PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0
mr_jaro napisał(a):

@stivens niech się nauczy podstaw, zresztą do tej pory async/await nie jest jakoś często stosowane bo i czemu by marnować to co jest naturalne dla js?

Autorze wątku, nie kumam co chcesz zrobić :) Rozpisz to jakoś po ludzku.

Mam dwa skrypty:

  1. skrypt ktory uzywa express.js do obslugi zapytan.
    Nic szczegolnego. W zaleznosci od parametru url-a, node.js wylacza program (zwykly exec linuksowy) i uruchamia ten sam program z innym plikiem konfiguracyjnym. To mi dziala. Chce do tego dodac, zeby mi zwracal status tego uruchamianego execa w osobnym zapytaniu. Ten exec serwuje status w formie pliku json przy uzyciu http.

  2. skrypt zajmujacy sie pobieraniem pliku json, przetworzeniem go i nastepnie zwracajacym wynik do skryptu nr1 ktory bedzie zwracal zawartosc do klienta.
    Obecnie mam ogarniete pobieranie pliku i parsowanie json-a.

Takie sa moje plany, ale cos ciezko idzie. Nie potrzebuje zadnych wodotryskow. Zwrotka do klienta moze byc zwyklym txt.

BraVolt
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Warszawa
  • Postów:2918
0
Paweleczek napisał(a):

cos ciezko idzie.

Weź jakiś porządny, duży (spoko - darmowy) tutorial i go przerób.


"Kiedy wiedzieć czy zacząć nauke Springa? bo w czystej Javie to nic ciekawego nie zrobie chyba"
Ein Volk, ein Reich, ein Kwa-Kwa ***** ***
PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0

A do czego te tutoriale brac? Do javascriptu, czy node.js. Kiedys czytalem, ze node.js, to javascript uruchamiany z command line, ale jak tak patrze, to poza skladnia, to sporo rzeczy sie rozni.

Riddle
Inne środowisko, język ten sam
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 19 godzin
0

Biblioteki sie roznia bo np. w przegladarce nie bedziesz miec filesystem ale asynchronicznosc to cecha jezyka. Zwyczajnie musiales nie miec do czynienia z takim interfejsem w innych bibliotekach.

https://www.valentinog.com/blog/http-js/


λλλ
edytowany 1x, ostatnio: stivens

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.