JS Tricky request for confirmation

Ako ti nije problem, jel bi mogao istipkati komad code-a koji bi zahtjevao user reakciju, a koji bi blokirao main thread, stavio ga da čeka dok user ne odreagira?

Naravno, ako je to neki simple kratak code…nemoj se dat tlačit :smiley: :smiley:

Ja, kao što rekoh…nisam radio još sa tim varijantama čekanja/nečekanja. Znam samo da asinkrono ide ajax request, image loadinzi, setTimout …i takve forice. Ali nemam na pameti kako bi mogao definirati da takvi pozivi budu sinkroni, tj. da ostatk code-a čeka da se izvrše.
Sjećam se da si jednom negdje spomenuo da se i to može…tad sam prvi puta čuo da i to postoji, hehe.

A unutar ove teme mi palo na pamet da bi i sa takvom opcijom možda mogao rješiti custom_confirm, da se čeka njegovo resolvanje.

Pa s obzirom da si iz prve debelo promašio poantu, nemam vremena proučavati tvoje prijedloge dok mi ne ostaviš dojam da si na tragu…

…ako želiš elaborirati svoje rješenje, samo daj. Neću ti ga ja elaborirati. :wink:

Generalno da, ali da se user pričeka da nešto aprova ili odbije, ne vidim neki problem?

Pa i nativni confirm() je blocking code i neće se ništa izvršavati dok se ne zatvori. Isto kao i svaki nativni alert.
Mislim stvarno da za konfirmaciju odluke, blokiranje codea ne može unesti nikakvu štetu.

:upside_down_face:
Znači nisi ni prob’o kod?

Ništa onda, sačekaćemo sljedećih 5 godina. :blush:

Neću reći da nisi u pravu, ali nisam iskreno ništa probavao. Di bi došao da idem za svakim po forumima i analziram što je on negdje testirao i klikao…i koje file-ove moram downloadati da bi to isto testirao.
Ako si već imao funkcionalan primjer, mogao si mi linkat radnu verziju u nekakav jsFiddle file i probao bi.

Onaj primjer 8 što se da kliknuti na swal stranici (što si linkao), ništa ne dokazuje! :wink:

Nema na čemu i drugi put. :wink:

Pa ovde sam ti napis’o šta da uradiš.
Preduslov tj. predznanje koje ti treba da upotrijebiš ovakvo rješenje je:

  1. Znati ubaciti Swal u postojeći kod tako da se može objekt Swal koristiti bilo gdje u aplikaciji
  2. Postaviti složenu funkciju u nekakav bootstrap fajl tako da je dostupna u najvišem scope-u (i konsekventno bilo gdje u kodu)
  3. Popraviti kod kako sam napomen’o u ovom postu da vraća bool (dodati i return true; gdje treba)

Sve je napisano. Što bi prepisiv’o na treću stranu? :thinking:

Mozda ovako nekako, nisam testiro tako da ne mogu nista da garantiram :smiley:

const confirm = (message) => new Promise((resolve, reject) => {
  if (somethingAboutDialog()) {
    return resolve(true)
  }
  reject(false)
})

const myFunc = async() => {
  foo()
  bar()
  if (await !confirm('hello')) return;
  
  etc()
} 

Zavisi od aplikacije.Sta ako u pozadini imas neki WebSocket, meh ? :smiley:

Jao što vas trola ova @bozoou. :slight_smile:

Prvo sam htio reći da developer vjerovatno zna kakvu mehaniku ima u pozadini, pa prema potrebi zna jel smije ili ne blokirati thread…

Ali vidiš, tu si u pravu…jerbo ako se prave nekakve komponente za koje se nezna u kakvoj okolini će raditi, tj. tko će ih sve koristiti…onda je blokiranje threada svakako nepoželjno :wink:

Btw. fala na primjeru, baš ću se poigrati.

Imaš neku soluciju ili si samo došao trolati :smiley: :smiley:

Btw. kada sam ja prvi puta htio napraviti konfirmaciju opisanu u uvodnom postu, to je pak bilo prije jedno 12g …i mislim da tada nije bilo ovih modernih fora koje iz rukava baca belmin.

Tako da ako se nekome čisto mozga kako bi se to moglo rješiti sa malo sirovijim JS-om, nek mozga…

I što ćemo sad? https://jsfiddle.net/c41r9uqw/2/

Zašto sam gubio vrijeme da bi ti pokazao da ti code ne radi? …kada se već sam nisi udostojio elaborirati i na ikoji način me uvjeriti da bi trebao raditi?

Eto, sada barem znaš za ubuduće zašto očekujem smislenu raspravu prije nego bacim dragocjeno vrijeme.

Uletio si u temu bahato, nisi skontao niti koji su uvjeti pitanja…omašio si debelo iz prve…i ja da ti kontroliram code? Koji si očito ne znaš sam prekontrolirati?

Gle, da se razgovaraš uljudno, nebi mi bio najmanji problem razgovarati. Ali kako nisi uljudan, ja nemam nikakve obaveze prema tebi odgovarati ti. Nemam zapravo prema nikome, ali za druge imam dobru volju, ako je i oni uzvraćaju.

Vidiš, svjedno sam te pozdravio i prije nego si došao u temu. Da citiram pozdrav taj:

:smiley: :smiley: Cheers. Neka pati koga smeta…

Mozemo li mi dobiti tvoje rijesenje na uvid ? :smiley:

1 Like

Naravno da ne. :slight_smile:

  if(!custom_confirm('Što ce ti obj, kada ga ne koristiš?')) return;
  
  log("Code neće biti ovdje bez obzira što odabereš...eto zašto ne testiram tvoje žbrljotine!"); 
  log("Puno si bahat...a malo mlijeka daješ...."); 

Nece biti zato sto ti funkcija vraca undefined.Rezultat tvog if statementa ce biti true, i naravno udarit ces na return :smiley:

const custom_confirm = () => {
    return Swal.fire({...}} 
}

Uradis ovo i doci ce gdje treba doci, ali to ni dalje nije ono sto ti zelis :smiley:

1 Like

Ups, my bad…nisam se puno ni zagledao u code ne očekujući da radi. Isto tako sam očekivao da ga je ostavio kakvog želi, pošto je bahato stajao iza njega da radi…

Ali da, ne radi ni sada. Sada uvijek propušta prolaz procesima, što je bilo očekivano i to sam već ranije pisao da bi se trebalo dešavati:

Sada je log samo potpuniji: https://jsfiddle.net/xn1f4yt5/2/

Eh evo ti sad jos malo zanimacije, al sam skontaj zasto jos ne radi :smiley:

Pa pošto imam barem tebe kojega zanima nešto vidjeti, stavit ću. Ali neka još prilike nekome da ponudi soluciju. Ipak je ovo tema tipa “zagonetka”. :slight_smile:

Bravisima, veliko bravisima! Ti si moj čovjek :slight_smile:

Evo, uspio sam doraditi da radi: https://codesandbox.io/s/1rp9lonlkq
…ali tvoj job je ono glavno :wink:

A sada bi mogao malo ped-erski reći:

“A lako je sa tim modernim alatima” .

Hehe, šalim se. Velika vrlina je pratiti tehnologiju, naravno.

Svejedno, imaš što za mozgati ako hoćeš riješiti isti problem bez tog await sistema. Kada se to uopće pojavilo? To je dio ECMA6 , 7 ili čega? Ja uopće zaboravim svaki puta u kojem ecma razdoblju smo, haha.

Nego da još jednom konkretiziram problem koji sam postavio.
Doduše, već sam dosta razjasnio, ali i meni je naknadno palo na pamet što mi je bilo najbitnije kada sam taj problem htio rješiti.

Bilo mi je najbitnije da neku funkciju mogu samo napola (ili bilo gdje već želim) …presjeći sa snippetom code-a koji će izvršavati konfirmaciju.
Nije mi sada bilo bitno hoće li ta konfirmacija biti 20, 50 ili 100 karaktera…ali bilo mi je bitno da je mogu elegantno samo copy-paste na željenu poziciju i da ništa drugo ne moram rekonstruirati. A pristup sa callback-ovima bi uvijek tražio barem neku minimalnu rekonstrukciju…zato sam to htio izbjeći za slučaj konfirmacije što je relativno čest slučaj…pa sam ga zato u pozivu htio maksimalno pojednostaviti.

Drugi uvjet mi je bio da u tom snippetu code-a koji ću kopirati, da u njemu nemam varijabilnih stvari.
Naravno, jedna varijabilna stvar mora biti…a to je poruka koja će se prikazati korisniku kod konfirmacije. No osim te poruke nisam htio da imam još neki dio snippeta koji moram prilagođavati situaciji gdje taj snippet postavljam.

Taj drugi uvjet sam duugo imao samo djelomično ispunjen…uvijek se nešto malo motalo oko nogu u tom snippetu, ali ajd, bilo je prihvatljivo i dalje praktičnije od rekonsturiranja i prebacivanja code-a u callback.

Eto, pojašnjavam taj dio jer je ok da se shvati koja mi je bila namjera i nit vodilja kada sam krenuo sa prvom varijantom te svoje konfirm metode. Znači htio sam pure “copy-paste” snippeta…i da radi. A što se u pozadini poziva…što Bog da, haha.

Nego, sukladno ovom što napisah u prošlom postu oko želje da se izbjegne ikakvo rekonsturiranje postojećeg code-a kod ubacivanja konfirm dialoga…ovaj tvoj pristup isto to malo krši. Jer se funkcija u koju se ubacuje mora prepraviti u async funkciju ukoliko to slučajno u startu nije bila.

Nije strašno, ali je detalj…
Isto tako, teško mi je ovako napamet reći što se još remeti nakon što funkciju prepravim u async funkciju… ako unutra imam nekakve ajax pozive ili što već…

Pretpostavljam da taj async utječe samo na one funkcije unutar koje su deklarirane sa “await” ?