• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JS "czytanie" środka funkcji

Object Storage Arubacloud
0 głosów
183 wizyt
pytanie zadane 4 grudnia 2020 w JavaScript przez hihijsonel Obywatel (1,250 p.)

Witam,

Mam oto taki problem jak w tytule. Pisze sobie funkcje ułatwiające mi prace (np getUserID() ) i mam taki oto problem. 

Chciałbym napisać funkcję, która 1. sprawdzi czy inna funkcja podana jako argument wywołuje błąd 2. jeśli tak, wyświetli w której linjice on się znajduje. Punkt 1 łatwo już osiągnąłem i chcę wykonywać krok po kroku jakąś funkcję. Czy ktoś ma pomysł jak to zrobić? Np coś w stylu: 

var x = func[0];
x();

 

 

Jak to będzie to całe PHP to od razu mówię  że to dla mnie za trudne i i tak nie zrozumiem, w przeciwnym razie proszę też o wyjaśnienia jak to działa

komentarz 4 grudnia 2020 przez wizarddos Nałogowiec (25,930 p.)

Jak to będzie to całe PHP to od razu mówię  że to dla mnie za trudne i i tak nie zrozumiem, w przeciwnym razie proszę też o wyjaśnienia jak to działa

gdzie niby przy JS miałby być PHP w twoim projekcie? Jeżeli piszesz w Javascript chyba wstawek z PHP  się nie robi

komentarz 4 grudnia 2020 przez hihijsonel Obywatel (1,250 p.)
Ja tam nie wiem kilka razy to całe PHP mnie uratowało przy pisaniu w JS.
Ale, jak napisałem, ja tam nie wiem
komentarz 4 grudnia 2020 przez wizarddos Nałogowiec (25,930 p.)
Ale  JS (czysty bez frameworków czy typescriptu) jest do FRONT-ENDU! A PHP do back-endu. To po co komu back-end w front-endzie. Zwykle to dwie osobne choć integralne części
komentarz 4 grudnia 2020 przez hihijsonel Obywatel (1,250 p.)
Ja się nie kłócę, ja nie wiem.

Czy to o co proszę jest możliwe czy nie, bo zaczynam wątpić...
1
komentarz 4 grudnia 2020 przez Wiciorny Ekspert (270,170 p.)

@wizadkol123, ale JS z frameworkami to juz do backendu :D... masło maślane troche, bo generalnie język to język. To na czym oparty jest framework nie oznacza, przeznaczenia języka do "czegoś' są rzeczy dedykowane jak HTML jako język znaczników czy CSS  język służący do opisu formy prezentacji stron WWW, ale to są wyjątki w dużej mierze. 

komentarz 4 grudnia 2020 przez wizarddos Nałogowiec (25,930 p.)
ok. No tak JS z framoworkami jest do back-endu. Sam język chyba został wymyślony dom frontu nie?
komentarz 4 grudnia 2020 przez Wiciorny Ekspert (270,170 p.)
Nie. Node.js to środowisko  do tworzenia aplikacji typu server-side :) czyli serwera, a jest napisany w JavaScript
komentarz 4 grudnia 2020 przez wizarddos Nałogowiec (25,930 p.)
Ni chodzi mi o to co comunity zrobiło z językiem tylko podstawowe zamysły autorów.
komentarz 4 grudnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

Ale  JS (czysty bez frameworków czy typescriptu) jest do FRONT-ENDU! 

+

Sam język chyba został wymyślony dom frontu nie?

Początkowo tak, ale z czasem JavaScript stał się językiem ogólnego przeznaczenia, a kontekst użycia, obiekt globalny, czy specyficzne API zależą od środowiska uruchomieniowego.

komentarz 4 grudnia 2020 przez wizarddos Nałogowiec (25,930 p.)
ok skoro tak to ok.

1 odpowiedź

+3 głosów
odpowiedź 4 grudnia 2020 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 4 grudnia 2020 przez hihijsonel
 
Najlepsza

Chciałbym napisać funkcję, która 1. sprawdzi czy inna funkcja podana jako argument wywołuje błąd 2. jeśli tak, wyświetli w której linjice on się znajduje.

Takie rzeczy lepiej sprawdzać pisząc unit testy -> https://www.chaijs.com/api/bdd/#method_throw

W kodzie produkcyjnym jest to o tyle ryzykowne, że żeby funkcja rzuciła błędem trzeba ją najpierw wywołać. To z kolei może spowodować powstanie efektów ubocznych w aplikacji, np.:

  • funkcja może wysłać Ajax (wtedy efekty uboczne mogą wystąpić na serwerze),
  • może zmienić jakąś zmienną w wyższym scope (w tym globalną) lub ogólnie zmienić stan aplikacji,
  • może niespodziewanie pokazać jakiś popup userowi lub przekierować go do innego widoku itp.

Co do technikaliów, to możesz zawinąć wywołanie takiej funkcji w try..catch i będziesz mógł sobie odczytać treść błędu ze wskazaniem na miejsce wystąpienia go w funkcji. Chyba, że funkcja sama w sobie ma try..catch, który nie rzuca błędu dalej, to wtedy go nie odczytasz poza funkcją. Ewentualnie próbować przy pomocy eventu error (przykłady użycia).

komentarz 4 grudnia 2020 przez hihijsonel Obywatel (1,250 p.)

A czy możesz jakiś przykład tego dać bo poczytałem o tym evencie error i nie za bardzo kumam jak tego użyć możesz jakiś zarys funkcji dać np: 

function reagujNaBlad(error) {
      const opis = blablabla ;
      const linjika = blablabla ;
      const plik = blablabla ;
      /*
      i tutaj to sam bede cos robic
      */
}

Byłbym wdzięczny

komentarz 4 grudnia 2020 przez ScriptyChris Mędrzec (190,190 p.)
Wyżej podlinkowałem przykład -> https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror

Pytanie. dlaczego chcesz to sprawdzać w ten sposób, zamiast napisać unit testy?
komentarz 4 grudnia 2020 przez hihijsonel Obywatel (1,250 p.)
Zacząłem je czytać, ale to dla mnie czarna magia a chciałbym się chociaż jednej funkcji nauczyć
komentarz 4 grudnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

Podpinasz się do obiektu window na zdarzenie error przed kodem/funkcją, gdzie spodziewasz się, że wystąpi błąd i gdy to nastąpi, to dowiesz się o błędzie w callbacku:

window.addEventListener('error', function(event) {
  console.log('Wystąpił błąd: ', event);
});
komentarz 4 grudnia 2020 przez hihijsonel Obywatel (1,250 p.)
Tylko jeszcze pytanie w jaki sposób to działa jak wpisałem w konsole nieistniejacaFunkcja() to się nic nie stało jak to działa?
komentarz 4 grudnia 2020 przez ScriptyChris Mędrzec (190,190 p.)
Error event może nie być triggerowany dla kodu uruchomionego z konsoli. Spróbuj wywołać błąd z normalnego skryptu.
komentarz 4 grudnia 2020 przez hihijsonel Obywatel (1,250 p.)
A jest jakiś sposób żeby to działało też na konsoli?
komentarz 4 grudnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

Możesz posłużyć się pomocniczą funkcją, która stworzy dynamicznie skrypt z kodem, który podasz jako string i na końcu go usunie (żeby nie zaśmiecać DOM'u; tylko pamiętaj, że jeśli stworzysz w nim jakieś zmienne globalne, czy listenery, to powinieneś je czyścić - ale to podobnie jakbyś uruchomił taki kod bezpośrednio z konsoli) - tylko to już jest stricte do użytku developerskiego; na produkcję bym tego nie wrzucał:

function executeCodeInScript(code) {
    const removeScriptCodeSuffix = `;document.currentScript.remove();`;
    const scr = document.createElement('script');
    scr.innerHTML = `${code}${removeScriptCodeSuffix}`;

    document.body.appendChild(scr);
}

// przykład użycia
executeCodeInScript(`console.log('My code executed from dynamic script')`);

 

1
komentarz 4 grudnia 2020 przez hihijsonel Obywatel (1,250 p.)

Dzięęęki!!!

Daje naj i +1.

Właśnie, pamiętam cię z mojego innego pytania. Tam też ci dam +1!!!

laughlaughlaughlaughlaughlaughlaughlaugh

 

 

EDIT: Oł, tam to był komentaż więc nie mogę tego zrobić sad

Podobne pytania

0 głosów
1 odpowiedź 117 wizyt
pytanie zadane 16 czerwca 2020 w JavaScript przez Marak123 Stary wyjadacz (11,190 p.)
0 głosów
2 odpowiedzi 472 wizyt
0 głosów
2 odpowiedzi 716 wizyt
pytanie zadane 2 października 2018 w JavaScript przez MrxCI Dyskutant (8,260 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...