- 200 milliárd dollárt önt a memóriagyártásba a Micron
- Elképesztő mértékben tömörítenék be a nagy nyelvi modelleket
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Atomenergiával dübörögnek tovább az Amazon adatközpontok, SMR-ek is jöhetnek
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
-
PROHARDVER!
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Jim-Y
veterán
-
-v-
addikt
Sziasztok,
JS-hez nálam jobban értő (ez kb. bárki
) véleménye érdekelne: adott egy oldal, jsp és sok sok gány és tré JS kód ... submitnál gond van, JS-ből van a submit, ott fut minden, és egy elég reprodukálhatatlan hiba van. Jól töltődnek ki a mező adatok, amikor beviszi az ember, submitnál meg hol jól menti el, hol nem, van amikor csak 1 szar, van amikor több (ez egy nagy táblázat, child row-k meg minden van). Backendre már a szar adat megy, szóval UI oldalon van a gond. Az ilyen reprodukálhatatlan hol jó hol nem jó dolog mindig valami konkurens issue, az a baj kevéssé értek én ehhez a JS-hez, ráadásul bőséges és gány kód van itt
esetleg valakinek mond ez valamit rögtön, hogy valami tipikus hiba? Vagy mit nézzek, hogy lehet ezt jól reprodukálni, kidebugolni? Jó lenne nem nagyon sok időt eltöltenem vele, mielőbb fixálni kellene.
-
Speeedfire
félisten
Az őszi webconf-on még azt mondták, hogy prod-ba nem igazán érdemes használni, max előre forgatva.
Hát a fene tudja, ez a projekt szerintem már kifut így, max a következő.Nem vagyok nagy js-es, időről időre mindig próbálok valamit magamra szedni. Viszont most a játék fejlesztés miatt nagyon kellett ez az extends. Viszont frankón megy.
-
Jim-Y
veterán
válasz
Speeedfire #5996 üzenetére
Pedig mire a vendorok is támogatnák teljes körűen addigra te is megszoknád a használatát. Szerintem a babel az production ready ugyhogy ha ilyesmitől félsz akkor ne tedd
-
Jim-Y
veterán
válasz
Speeedfire #5994 üzenetére
Amúgy mi a gond a babel-el?
-
fordfairlane
veterán
válasz
Speeedfire #5990 üzenetére
kocsi.call(name, ajtok, urtartalom);
helyett
kocsi.call(this, name, ajtok, urtartalom);
vagy akár
kocsi.apply(this, arguments);
-
Jim-Y
veterán
Na, de csak, hogy legyen ES6-os példa is
-
Jim-Y
veterán
válasz
Speeedfire #5990 üzenetére
ES6-hoz nem feltétlen kell babel, ott a node az támogatja már
Egyébként a setNameUrtartalom egy példány metódus amit egy példányon tudsz meghívni, a konstruktorban még nincs példányod így nem is tudod azt meghívni, meg hát értelme sincs. Inkább már ott setteld be normálisan.
+ használj nagy kezdőbetűt a classokhoz
+ a setterek igazodjanak a konvenciokhoz tehát legyen bemeneti argumentum és azt settelje be -
Speeedfire
félisten
Próbálok kicsit játszadozni az osztályokkal, de valami nem kerek. [link]
var kocsi = function(name, ajtok, urtartalom) {
this.name = name;
this.ajtok = ajtok;
this.urtartalom = urtartalom;
this.nameUrtartalom = null;
this.setNameUrtartalom();
};
kocsi.prototype.setNameUrtartalom = function(){
this.nameUrtartalom = this.name + '-' + this.urtartalom;
};
kocsi.prototype.getNameUrtartalom = function(){
return this.nameUrtartalom;
};
kocsi.prototype.getAjtok = function() {
return this.ajtok;
};
kocsi.prototype.getName = function() {
return this.name;
};
kocsi.prototype.geturtartalom = function() {
return this.urtartalom;
};
var cabrio = function(name, ajtok, urtartalom, teto) {
kocsi.call(name, ajtok, urtartalom);
this.teto = teto;
};
cabrio.prototype = Object.create(kocsi.prototype);
cabrio.prototype.constructor = cabrio;
cabrio.prototype.getTeto = function() {
return this.teto;
};
var honda = new cabrio('S2000', 2, 1997, 'puha');
alert(honda.getName());
alert(honda.getNameUrtartalom());
alert(honda.getTeto());Ha nincs set metódus, akkor minden frankón megy. Ellenben ha a szülőben egy set metódust csinálok, akkor gyerek hibával elszáll. Jelen esetben a setNameUrtartalom-ra azt írja, hogy nem funkció. Mit rontok?
Tudom, használjak es6-ot...meg babel-t....
-
zeix
senior tag
Sziasztok!
Lenne egy kis problémám a Javascript-tel.
Van egy egyszerű kódom:
<script type="text/javascript">
function chk1()
{
var name=document.getElementById('name').value;
var date=document.getElementById('date').value;
var dataString='name='+ name +'&date=' + date;
$.ajax({
type: 'post',
url: 'script.php',
data: dataString,
cache: false,
success: function (html) {
$('#msg1').html(html);
}
});
return false;
}</script>html:
<div id="msg1"><form>
<input type="hidden" id="name" value="0">
<input type="hidden" id="date" value="1">
<a class="btn btn-sq btn-primary" onclick="return chk1()" value="Submit">
<br>qwertt</a></form></div>php:
$name = $_POST['name'];
$date = $_POST['date'];
if($name == '1')
{
echo '<form>
<input type="hidden" id="name" value="0">
<input type="hidden" id="date" value="'.$date.'">
<a class="btn btn-sq btn-primary" onclick="return chk1()" value="Submit">
<br>'.$date.'</a></form>
';
}
else {
echo '<form>
<input type="hidden" id="name" value="1">
<input type="hidden" id="date" value="'.$date.'">
<a class="btn btn-sq btn-primary" onclick="return chk1()" value="Submit">
<br>'.$date.'</a></form>';
}
A kérdésem az lenne, hogy hogyan kellene átírni a javascriptet, hogy a html rész (<form>) egy ciklusban íródna ki az oldalra.Köszi!
-
Aureal
őstag
Olyan kérdésem volna, hogy ezen oldal player része alá meg lehetne oldani egy másik m3u8 stream tartalom linkjének befűzését?
Úgy is kérdezhetném, hogy az oldal playerét így online fel tudnám-e használni egy másik csatorna (M3) online streameléséhez?
Végeredményként egy saját html oldal a cél (meg is van), amihez csak ezzel a módosított m3u8 linkel való player beágyazás hiányzik...Sorry hogy bonyolult lett, rövidebben érthetőbben nem tudtam másképp előre hogyan feltenni a kérdést.
-
martonx
veterán
Hát én nem tudom, te hogy néztél egyáltalán szét ez ügyben, mert akár csak a saját dokumentációjukban is felsorolnak egy rakás példát: https://docs.mongodb.org/ecosystem/tools/administration-interfaces/
-
-
tick
aktív tag
Nem teljesen tartozik ide, de hátha. Adott egy csodás cloud környezet ahol a nodejs-t elérem másolni és package-eket feltenni tudok, viszont kívülről a hozzá tartozó mongodb nem érhető el tűzfal miatt. (pl mongo shell-ből) Van esetleg valami npm amivel meg lehet kerülni? Webes mongo shell vagy valami tunneling megoldás? (ssh nem megy sajna)
-
Jim-Y
veterán
Vannak itt angularjs guruk? http://stackoverflow.com/questions/36473502/uibmodal-call-scope-function-from-windowtemplate
-
Sk8erPeter
nagyúr
válasz
Speeedfire #5979 üzenetére
Egyszerűbbnek biztos nem egyszerűbb, mivel így még a fejlesztőkörnyezet autocomplete-je és refaktorálási képességei sem használhatóak ki, ráadásul még hibalehetőséget is visz a kódba, szóval igazából minden szempontból rosszabb, mint ha ezeket a stringeket EGYSZER eltárolnád egy konstansba, aztán onnantól kezdve azokat használnád.
Pl. itt mennyivel értelmesebb és szebb lenne úgy használni a kódban, hogy helperTypes.gun vagy helperTypes.health, mint odahákolni minden alkalommal egy stringet a switch-ekbe. Vagy ha ragaszkodsz az indexeléshez, akkor magukat az indexeket is lehetne tárolni, és pl. helperTypes[GUN] módon felhasználni. De te tudod. -
Speeedfire
félisten
válasz
Sk8erPeter #5978 üzenetére
Vagy csak mert csak, jó az vidékre?
Valami ilyesmi!
Sok json van, és inkább keycatalog szerű kulcsokkal dolgozok. Egyszerűbb és ritkán változik. Ha pedig mégis, akkor gyorsan át tudom ütni a key-eket a forrásban. -
Sk8erPeter
nagyúr
válasz
Speeedfire #5977 üzenetére
Mármint úgy érted, másnak a kódja, amibe nem nyúlhatsz bele? Vagy csak mert csak, jó az vidékre?
-
Speeedfire
félisten
válasz
Sk8erPeter #5976 üzenetére
Nem módosítom ezt a részt.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #5969 üzenetére
Azt még azért mindenképp szépíteni kellene a kódon, hogy ne stringek legyenek ilyen esetben a switch-ben, meg a helperTypes tömbben sem, hanem konstansok (mármint most ez nem keverendő a string konstansokkal, sszóval érted
), hiszen ha mindenhol stringeket használsz fel, az törékennyé teszi a kódot. (Pl. ha később rájössz, hogy azt nem "healt"-nek, hanem "health"-nek kellene írni, és egyik helyen így használod, másik helyen úgy.
)
-
Jim-Y
veterán
válasz
Speeedfire #5974 üzenetére
Az csak azért van mert túl kicsi a minta, minél nagyobb a minta annál jobban kilapolódik. Írd át 100-ról 1000-re, onnan 10.000-re stb. Szépen kilapolódik 70, 30-ra...
-
sztanozs
veterán
válasz
Speeedfire #5972 üzenetére
Miért nem pontos? Pont 70/30 arányban vág, ahogy kérted.
The Math.random() function returns a floating-point, pseudo-random number in the range [0, 1) that is, from 0 (inclusive) up to but not including 1 (exclusive), which you can then scale to your desired range.
Jim-Y Miért kell shuffle, ha amúgy is random elemet választasz ki?
-
Jim-Y
veterán
válasz
Speeedfire #5969 üzenetére
Szerintem teljesen jó, hogy van egy tömbböd, amiben benne vannak a lehetséges itemek, majd összekevered a tömböt, és random választasz belőle.
Valami ilyesmit tudnék elképzelni bétának
https://jsfiddle.net/3421sjs2/
-
sztanozs
veterán
válasz
Speeedfire #5969 üzenetére
function getTypeValue() {
var result = Math.random();
if(result < 0.7) return 0; //fegyver
else return 1; //heal
}
this.helperTypes = [
'gun', 'healt'
];
addHelper: function () {
if (this.game.time.now > this.nextHelper) {
this.nextHelper = this.game.time.now + this.helperRate;
var type = getTypeValue();
this.helpers.push(new Helper(this.countHelper, game, this.player, this.helperTypes[type]));
this.countHelper++;
}
},Btw, amúgy heal (gyógyít/gyógyítás) vagy health (életerő).
-
Speeedfire
félisten
Egy kis html5 játékon dolgozok phaser motorral. A játékban x időközönként feljönnek ikonok amiket ha felvesz a játékos akkor plusz élet vagy fegyvert kap (legalábbis jelenleg, de ezt bővíteném). Fegyverből is van 11 féle.
A lényeg az lenne, hogy amikor egy ilyen ikont feldobok, akkor 30% valószínűséggel legyen élet, a maradék 70%-ban pedig fegyver. Jelenleg csak kiveszem a helperTypes tömbből az egyik elemet és abból lesz az ikon. Vagy fegyver vagy élet. Ezt a Helper osztály konstruktora tovább dolgozza. Kb ennyi lenne a lényeg. De nem tudom a 30/70-et hogy tudnám megoldani.this.helperTypes = [
'gun', 'healt'
];
------------------------------------
addHelper: function () {
if (this.game.time.now > this.nextHelper) {
this.nextHelper = this.game.time.now + this.helperRate;
var type = game.rnd.integerInRange(0,this.helperTypes.length);
this.helpers.push(new Helper(this.countHelper, game, this.player, this.helperTypes[type]));
this.countHelper++;
}
},
------------------------------------
var Helper = function (index, game, player, type) {
var x = game.rnd.integerInRange(game.width/2,game.width-50);
var y = game.rnd.integerInRange(50,game.height-50);
this.game = game;
this.player = player;
this.type = type;
this.helper = game.add.sprite(x, y, type);
this.helper.anchor.set(0.5);
this.helper.name = index.toString();
game.physics.enable(this.helper, Phaser.Physics.ARCADE);
this.helper.scale.setTo(0.25, 0.25);
this.helper.outOfBoundsKill = true;
this.helper.checkWorldBounds = true;
this.helper.body.immovable = false;
game.physics.arcade.velocityFromRotation(this.helper.rotation, -100, this.helper.body.velocity);
};
Helper.prototype = Object.create(Phaser.Sprite.prototype);
Helper.prototype.constructor = Helper;
Helper.prototype.update = function () {
//todo
};
Helper.prototype.useIt = function(gameObj) {
switch(this.type) {
case 'gun':
var index = this.game.rnd.integerInRange(1,9);
gameObj.setWeapon(index);
break;
case 'healt':
var index = this.game.rnd.integerInRange(1,5);
gameObj.healt += index * 10;
break;
default:
//todo
break;
}
};
sztanozs:
Csak gyors összedobtam a példákat, nem figyeltem, hogy pontosan jó-e.Szerk.: Köszi, bár nem tudom, hogy most akkor ez kell-e számomra vagy sem.
-
sztanozs
veterán
válasz
Speeedfire #5965 üzenetére
Némileg minimalizálva
-
sztanozs
veterán
válasz
Speeedfire #5965 üzenetére
Csak egy apróság - ha már az erőforrásigény érdekel. Az aláhúzott rész felesleges:
function getValue() {
var result = Math.floor(Math.random() * 10) + 1;
if(result<=3) {
return 1;
} else if(result>3 && result<=7) {
return 2;
} else {
return 3;
}
}document.getElementById('result').value = getValue();
Amúgy a Math.floor, meg a +1 is felesleges. Ja és nem 7, hanem 8 (30% + 50% = 80%)
function getValue() {
var result = Math.random();
if(result<0.3) {
return 1;
} else if(result<0.8) {
return 2;
} else {
return 3;
}
}document.getElementById('result').value = getValue();
-
Jim-Y
veterán
válasz
Speeedfire #5965 üzenetére
Két külön dolgot csinálsz először, majd most. Az első példában X (100) darab elemből 30 darab egyest, 40db 2-t maradék 3-ast adsz vissza, tehát 1-esből 30% kettesből 40, stb darabod lesz. Ahogy csináltad az nem tartom túl erőforrásigényesnek mert O(n)-es a műveletigény. A második példában generálsz véletlen számokat 10-ig majd a véletlen szám függvényében adsz vissza valamit. Itt nem tudod garantálni hogy melyik milyen arányban legyen mert pszeudorandom lesz a szám. Nem akarod leírni hogy mit akarsz így megoldani hátha van rá jobb/más megoldás?
-
Speeedfire
félisten
válasz
Speeedfire #5963 üzenetére
Jól sejtem, hogy valami ilyesmi lesz a megoldás?
sztanozs:
az x db elem és az x 30%-al jöjjön vissza között van valami korreláció, vagy csak véletlenül használtad ugyanazt a 'változót' két külön dologra?
Véletlen volt.Példa:
Van egy zsák, amiben van körte, alma és szilva. Ha belenyúlok a zsákba, akkor véletlenszerűen kapok egy gyümölcsöt. Én azt szeretném, ha belenyúlok, akkor 30% valószínűséggel legyen alma, 50% valószínűséggel körte és 20% valószínűséggel legyen szilva.
Emiatt gondoltam, hogy felöltöm előre a zsákot és akkor elvileg ezt kapom meg.Utólag gondoltam, hogy lehet nem kellene feltölteni. Hanem kérek egy random számot, ez lenne a százalék és ebből adom meg, hogy az alma, szilva vagy körte. Kicsit fordított logika, de a kód sokkal rövidebb lett.
-
sztanozs
veterán
válasz
Speeedfire #5963 üzenetére
az x db elem és az x 30%-al jöjjön vissza között van valami korreláció, vagy csak véletlenül használtad ugyanazt a 'változót' két külön dologra? Írnál egy Móricka példát esetleg? A JSfiddle számomra nem sikerült túl egyértelműre.
-
Speeedfire
félisten
Sziasztok!
Olyat szeretnék csinálni, hogy adott x db elem, ezek közül akarok visszanyerni egyet. De úgy, hogy pl x 30%-al jöjjön vissza, míg y 50%, a maradék 20%-ban pedig a z.
Erre írtam egy elég "erőforrás" igényes dolgok, de nem tudom lehet-e ezt egyszerűsíteni, avagy sem.
Példa illetve abban sem vagyok teljesen biztos, hogy ez így okés
-
DNReNTi
őstag
válasz
PumpkinSeed #5961 üzenetére
Én se saját kasszából szándékozok menni.
-
DNReNTi
őstag
Igaz még nagyon-nagyon odébb van de ngEurope-ra vagy Angular Connect-re megy valaki innen?
-
Jim-Y
veterán
Köszi,
Hát ezt egy kicsit későn láttam meg, közben előálltam egy béta verzióval saját kútfőből, de le fogom cserélni az általad linkelt elegánsabb megoldásra.
Azért, mert tudom, hogy így illik, a megoldás:
const { AuthError, LoginError } = require('blabla');
const THRESHOLD_OF_TRIES = 3; // 3 tries until drop
const DEFAULT_TIMEOUT = 300000; // 5mins in milliseconds
const cache = {};
module.exports = function * rateLimiter(next) {
const user = this.request.body.email;
if (cache[user] != null && cache[user].tries >= THRESHOLD_OF_TRIES && Date.now() < cache[user].dropUntil) {
this.throw(423); // Locked for 5 mins
}
else if (cache[user] != null && cache[user].tries >= THRESHOLD_OF_TRIES && Date.now() > cache[user].dropUntil) {
delete cache[user];
}
try {
yield next;
}
catch (err) {
if (err instanceof AuthError || err instanceof LoginError) {
if (!cache[user]) {
cache[user] = {
tries: 1,
dropUntil: null
};
}
else {
cache[user].tries++;
if (cache[user].tries >= THRESHOLD_OF_TRIES) {
cache[user].dropUntil = Date.now() + DEFAULT_TIMEOUT;
}
}
this.throw(err);
}
console.error(err);
}
}; -
Karma
félisten
Elég jó kulcsszavakkal kerestél szerintem, nem tudom miért nem találtad meg a kulcsrakész megoldást ("Brute Force Protection" szakasz).
-
Jim-Y
veterán
válasz
martonx #5952 üzenetére
Inkább utóbbi, de kliens oldalon semmit sem elég lekezelni. Közben rájöttem, hogy tényleg kevertem kicsit a szezont a fazonnal, vagy legalábbis két külön dologról van szó.
1: throttling, hány request mehet egyidejűleg - böngészőnek van beépített defaultja -> nem érdekel most engem
2: ddos - ne lehessen floodolni a szervert -> ehhez tűzfal vagy proxyszerver kell, van rá out-of-the-box megoldás -> nem érdekel most
3: "rate limiter" - a user megpróbál belépni, nem megy, megpróbál mégegyszer, nem megy, harmadik próba előtt már várnia kelljen 5 másodpercet -> ez kell nekemValószínűleg nincs erre kész megoldás, meg csinálni magamnak, de nem tűnik vészesnek, így, hogy már rendbe tettem a fejemben a dolgokat
És ha hiszitek ha nem, az, hogy leírtam már sokat segített, hogy tisztuljon a kép
-
martonx
veterán
Kérdés, hogy ez mire kell neked? Ha DDoS elleni védelemnek, akkor arra léteznek speciális tűzfalak, amik kenik-vágják a request limiteket.
Ha csak hülye user elleni védelemnek, akkor elég böngészőben js oldalon lekezelni, hogy fizikailag ne tudjon X-szer rányomni a gombra. -
Jim-Y
veterán
Sziasztok.
Elakadtam és nem tudom, hogy a "problémára" milyen buzzworddel tudnék keresni a neten :/
Rate limitinget szeretnék csinálni nodejs alatt. Például authentikáció -> a user próbálkozik, meghívja az API endpointot de nem sikerült az authentikáció (pl login) ezért újrapróbálkozik. Amit szeretnék hogy pl 3 próba után kelljen várni 5 másodpercet, 5 sikertelen próba után 15mp-et stb..
Magyarán az egy user által kiadott lehetséges requestek számát szeretném limitálni. Vagy backenden csak minden x-ediket feldolgozni, vagy.. hát pont ezaz, hogy nem tudom, hogy ezt hogy szokták csinálni, vagy hogy merre induljak el. Egyáltalán hogy tudnék erre rákeresni?
Próbáltam:
nodejs rate limiting
nodejs request limitation
nodejs limit the number of http request callsNem igazán jártam sikerrel :/
megj: koca módszerrel valami olyasmit csinálnék hogy írok egy middleware-t amiben van egy hashtable, valahogy azonosítom a requesteket, és ha ugyanazon usertől jön threshold + 1 request X mp-n belül (vagy más logika alapján, pl sikertelen login) akkor utána eldobom a többi requestet X mp-ig.
megj2: mintha a throttling lenne a jó buzzword erre, rákeresek...
megj3: most hogy így gondolkozom, lehet ez két külön probléma.
ad1: throttle - limitálni az adott időn belül kiadható requestek számát (jó lehet nekem valamire
)
ad2: login esetén számon kéne tartani a próbálkozások számát, ehhez jó lehet egy middleware, de valahogy azonosítani kéne a user-t. Namost kérdés, hogy a requestet kell-e azonosítani vagy a user-t. -
a2d2
addikt
Na sikerült végre. Eszembe jutott egy marha egyszerű ötlet és szerencsére működött.
Ennyi volt az egész:JS első fele
if koordinátákat kell számolni
{
function getLatLng(callback) {
geocoder.geocode({'address': v_cim},function(results,status){
if(status == google.maps.GeocoderStatus.OK) {
v_koord_x = results[0].geometry.location.lat();
v_koord_y = results[0].geometry.location.lng();
callback(v_koord_x, v_koord_y);
}
});
}
getLatLng(function(v_koord_x, v_koord_y) {
alert(v_koord_x);
alert(v_koord_y);
folytatas();
});
}
else
{
folytatas();
}function folytatas()
{
JS második fele
} -
a2d2
addikt
Szia!
Na ránéztem a tegnapi alkotásokra és ahogy nézem próbáltam már minden félével (.when, .then, async: false, ...), de nem tudtam sehogy megállítani a főprogramot. Ez egy OL3 program, benne egy google maps-es geokódolással. A JS második fele kellene hogy megkapja a kiszámított koordinátákat:
JS első fele
function getLatLng(callback) {
geocoder.geocode({'address': v_cim},function(results,status){
if(status == google.maps.GeocoderStatus.OK) {
v_koord_x = results[0].geometry.location.lat();
v_koord_y = results[0].geometry.location.lng();
ajaxvege = true;
callback(v_koord_x, v_koord_y, ajaxvege);
}
});
}getLatLng(function(v_koord_x, v_koord_y, ajaxvege) {
alert(v_koord_x);
alert(v_koord_y);
});JS második fele
-
Jim-Y
veterán
A javascript esemenyvezerelt aszinkron programnyelv a te esetedben az aszinkronitason van a hangsuly. Ha ezzel a fogalommal most talalakozol eloszor akkor keress ra a neten biztos jo leirasok vannak rola. Roviden tomoren az ajax hivas megszolitja a backendet, kuld egy requestet amire majd valamikor a jovoben jon egy valasz. Na most az talan erzodik, hogy a majd valamikor a jovoben az nem egy tul kezzel foghato valami, nagyon sok mindentol fugg, hogy mikor jon meg a valasz igy a lenyeg, hogy addig nem szabad feltartani a program futasat (nem szabad blokkolni). Ezt javascriptben (is) promiszokkal oldjak meg (promise). Ha ez a fogalom is ismeretlen szamodra akkor keress ra a neten -> (A+ promise). A jquery-nek (gondolom jquery-t hasznalsz ajax implementaciokent) is van egy sajat implementacioja a promisokra ezt hivjuk deferred-nek. Na a jQ ajax metodusai ilyen deferreddel ternek vissza
pszeudokod:
var yourVariable;
var dfd = jquery.ajax(options);
dfd.then(
function goodCase(returnVal) {
yourVariable = returnVal;
// do smtg with yourVariable here
},
function errorCase(err) {
if (err) {
console.error(err):
}
}
); -
a2d2
addikt
Sziasztok!
Remélem jó helyen járok AJAX kérdéssel.
Az egész napom ráment ma egy program részletre, és csak nem sikerült működésre bírni.Gyorsan összefoglalom miről van szó:
Adott egy javascript amiben van egy AJAX blokk. Az AJAX blokk elindul de közben a JS fut tovább a főszálon, pedig használnia kellene az AJAX-nál visszakapott paraméter értékeket.
Ezt úgy próbáltam megoldani hogy létrehoztam egy ajaxvege = true változót a JS elején. Mielőtt elindulna az AJAX rész, ennek az értékét false-ra állítom, majd az AJAX végén visszállítom ezt az értéket true-ra. Az AJAX blokk után a főprogramban pedig meghívok egy ciklust, aminek az lenne a dolga hogy addig sleepeltesse a JS-t, amíg az ajaxvege = false.
Úgy gondoltam hogy ez így teljesen működőképes, de kiíratva az ajaxvege változó értékét, az folyamatosan false értéket mutat és végteleníti a ciklust (holott maga az AJAX rész csak kb egy mp-ig fut alap esetben).
Olyan mintha a JS nem venne tudomást arról hogy az AJAX közben módosítja a változó értékét.
Úgy is próbáltam hogy csak simán módosítottam a változó értékét miután meglett a többi paraméter értéke, úgy is próbáltam hogy a paraméterek mellett callback-el visszaadtam a hívó félnek az ajaxvege változót is, de nem működik egyszerűen.Van valakinek ötlete mi lehet a gond?
Köszönöm!
-
PumpkinSeed
addikt
válasz
Sk8erPeter #5943 üzenetére
Köszönöm, az biztos, hogy van mit javítani a JS tudásomon, és elég erősen rajta is vagyok, amikor időm engedi. A változónevek meg csak ideiglenesek, refaktoráltam is, csak az a jsFiddle-n nem látszódik.
-
Sk8erPeter
nagyúr
válasz
PumpkinSeed #5929 üzenetére
Ez így elég csúnya, picit zsongott az agyam a kód olvasása közben.
Itt ráadásul a for...in ciklusnak nincs is haszna, sőt.
A getStartTime metódusnévből ráadásul nem érthető, hogy most igazából a szabad órák kezdőidejét szeretnéd lekérni.
Érdemes egyébként néha a sok-sok indexelés több helyen történő használata helyett inkább a ciklusmag elején eltárolni változóba az aktuális értéket, vagy akkor belül is for...in-t használni.
És ezenkívül szebb lenne, ha objektumként passzolnád át tömb helyett, hogy mondjuk egy startTime és nextTime lekérdezhető legyen így attribútumnév szerint (és nem kellene agyonindexelgetni a tömböket).Számomra ez jóval olvashatóbb, persze még ezen is lehetne szépíteni, most 5 percből ennyire futotta:
https://jsfiddle.net/d1jntk9a/1/Szerk.: ja, most nézem, a freehours-nál is asszem többszörösen egymásba ágyazott tömböt szerettél volna, ennek a további indexelése lemaradt, mindegy, a lényeg végül is érthető.
-
Sk8erPeter
nagyúr
"De ezt a mondatot neked írtam és nem neki"
Nem is nekem írtad.Szerintem mindketten értjük, mi a pálya, egyszerűbb, ha itt áll mindhárom változat, amiről beszéltünk, és akkor a kezdő is remélhetőleg megérti/megérzi a különbséget:
1:
var numbersArray = [1,2,3,4,5,6,7,8,9];
var evenNumbers = [];
for(var i = 0; i < numbersArray.length; i++) {
if(numbersArray[i] % 2 == 0) {
evenNumbers.push(numbersArray[i]);
}
}
console.log("Even numbers: ", evenNumbers);2:
var numbersArray = [1,2,3,4,5,6,7,8,9];
var evenNumbers = numbersArray.filter(function(num) {
return num % 2 === 0;
})
console.log("Even numbers: ", evenNumbers);3:
var numbersArray = [1,2,3,4,5,6,7,8,9];
var evenNumbers = numbersArray.filter(num => num % 2 === 0);
console.log("Even numbers: ", evenNumbers);(#5940) zuzu000:
"Egy Javascriptes metódust szeretnék implementálni C#-ba"
Ez a mondat így ebben a formában nem biztos, hogy értelmes...(#5937) Aureal:
Mi a cél vele amúgy? -
Zedz
addikt
-
zuzu000
őstag
Sziasztok!
Egy Javascriptes metódust szeretnék implementálni C#-ba, és egy ilyen jött velem szembe:
var dist = valamilyen double szám.majd
if (!dist)
Ez annyit tesz, hogyha dist != 0?
-
fordfairlane
veterán
-
Aureal
őstag
Egy DIV elemről hogyan kérhetők le a CSS style paraméterei?
Classlist kombinálgatásával esetleg? -
Karma
félisten
válasz
martonx #5932 üzenetére
Esetleg egy ilyen megközelítés?
-
martonx
veterán
Ki mennyire vágja a gulp-ot? Én használgatom, de most lenne egy bonyolultabb felállás. Adott egy ilyen mappa struktúra:
css
| site - ebben vannak az oldal alap scss-ei, ezekből rendben generálok is egy compile-olt css-t
site.css
| themes - ebben a mappában vannak az alap megjelenésen felüli domainenként használt scss-ek
| theme1
theme1.scss
site.css - ez a site mappában lévő site.scss + az itt lévő theme1.scss-ből állna elő
| theme2
theme2.scss
site.css - ez a site mappában lévő site.scss + az itt lévő theme2.scss-ből állna előA lényeg, hogy ugyanaz a site több domainnel is elérhető lenne, és minden domain a saját témájával jelenne meg. Mindegyik oldal egy darab site.css-t használna, ebbe a site.css-be lenne beleforgatva a site mappában található lényeg, plusz az adott téma mappában lévő theme.css.
Ezt hogy lehetne gulppal szépen kivitelezni? Fapados módszert persze tudom, annyi taskot csináljak ahány témám van, és taskonként adjam meg, hogy mit honnan hova szedjen össze. Valami szebb, általánosabb megoldást keresnék, hogy ha felveszek X új témát, ne kelljen X gulp taskot is készíteni hozzájuk.
-
dqdb
nagyúr
válasz
PumpkinSeed #5929 üzenetére
Nem a feltétel száll el, hanem az értékadás. Az pedig azért, mert a kétdimenziós tömbként kezelt freehours feltöltése nem történt meg megfelelően. Ezért a freehours[ i ][j]-ből a freehours[ i ] már undefined értékre fut, így az undefined[j] utasítás próbál meg lefutni, nyilván sikertelenül.
-
PumpkinSeed
addikt
Olyan kérdésem lenne, hogy mi a problémája az if feltételemben lévő 0 indexel ebben a kódban? Pont az if előtt kiíratom a teljes feltételt és hiba nélkül lefut, aztán az if-en belül pedig elszáll...
-
Jim-Y
veterán
válasz
Sk8erPeter #5926 üzenetére
De ezt a mondatot neked írtam és nem neki. Az ő szemszögéből az, hogy azt írjuk, hogy
function(num) { return num % 2 === 0 } vagy
num => num % 2 === 0az irreleváns, mert a lényeg a filter használata és, hogy az, hogy páros valami úgy nézzük meg, hogy x osztva kettővel a maradék nulla-e.
-
Sk8erPeter
nagyúr
Igen, szerintem ne egy filter és egy fat arrow megértésével kezdje valaki, amíg gondot okoz neki, hogy kigyűjtse egy tömbből a páros számokat, tehát még nem tiszta számára, hogy mit jelent egy for/while ciklus. Kezdőként Te sem syntactic sugart raktál a kávédba hagyományos cukor helyett.
Gondolj bele, mit fog fel egy kezdő abból, ha azt írod neki, hogy "Ezt fat arrow-nak hívják ami egy rövidebb syntactic sugar a function expressiönök helyett és lexikálisan bindolja a this-t, kvázi block scoping."
-
tick
aktív tag
Sziasztok! Hogyan tudnám megoldani hogy egy objektum pl egy óránként elindítson egy függvényt? ("magára")
Konkrétan egy nodejs modulról van szó, DB pool object. (ibm_db npm)
Szépen és jól működik de ha túl sok kapcsolat nyílik egy hirtelen peak miatt (vagy ha valaki rátenyerel az F5-re) akkor azok végleg ott is maradnak. Ez nyilván feleslegesen foglalja a pool-okat és a kapcsolatokat is. Nem találtam lehetőséget unused timeout-ra.
A forrásba belenyúlva sikerült megoldani hogy minden egyes kapcsolat záráskor (amikor egy "thread" visszakerül az elérhető kapcsolatok közé a használtak közül) indítson egy cleanUp függvényt és ténylegesen zárjon le minden olyan kapcsolatot ami X időnél régebb óta idle. Ez viszont nekem nem tűnik túl elegáns megoldásnak.
Lehetne még cron-ból futtatni egy npm scriptet, ez viszont utómunkát igényel implementálás után és mondjuk egy win-es rendszeren nem mindenki tudja hova kell nyúlni hirtelen.
Bármilyen ötletet szívesen fogadok -
Jim-Y
veterán
válasz
Sk8erPeter #5923 üzenetére
Hát de mi az, hogy magic? Ez a legújabb szabvány, ez a nyelv része, ha magic akkor nem érti a nyelvet és még tanulni kell
Nekem senki ne próbálja meg eladni, hogy ne ezt írjam egy kezdőnek, ha nem érti, semmi gond, csapja fel a doksit és olvassa el, hogy mit jelent. Most ha curryztem volna meg ez-meg-az akkor még megértem, de ez egy nyelvi elem még csak nem is magic
Illetve én olyan példát szeretek mutatni ami előre viszi az embereket nem stagnál vagy visszahúzza. Ha például foglalkozik ezzel és megtetszik neki, majd netántán ezzel fog foglalkozni, akkor sokkal jobb ha már tudja, hogy mi az hogy fat arrow meg block scoping meg főleg, hogy mi az hogy [].filter.
p.s: szerinted egy filter + fat arrow már poweruser kategória? Mármint komolyan kérdezem
-
Jim-Y
veterán
válasz
martonx #5921 üzenetére
Amúgy nem ezt hívják lambdának, mármint..ezt is, de lambda már ES5-ben is volt. Ezt fat arrow-nak hívják ami egy rövidebb syntactic sugar a function expressiönök helyett és lexikálisan bindolja a this-t, kvázi block scoping. Az ES6 pedig már hivatalos az más kérdés a hogy a különböző vendorok még nem implementálták az összes ES6-os feature-t.
-
Sk8erPeter
nagyúr
-
Jim-Y
veterán
válasz
Sk8erPeter #5917 üzenetére
"Azt nem tudom, van-e érdemi sebességbeli előny vagy hátrány a hagyományos for ciklushoz és tömbbe pakolós módszerhez képest."
Előny az írásmódban van, sebességben nincs, sőt, elméletileg lassabbnak is kéne lennie a filternek picivel mert:
- belül ez is csak egy for ciklust használ
- de pluszban vannak ellenőrzések, hogy egyáltalán tömb-e amin meghívjuk, stb..De a különbségek elhanyagolhatóak, biztos hogy egy átlagos js projektnél nem ez lesz a szűk keresztmetszet. Akkor pedig a filter elegánsabb, tömörebb, jobban olvashatóbb, leíróbb, chainelhető. Meg hát úgy egyáltalán egy újabb absztrakciós réteg (sort of)
-
Sk8erPeter
nagyúr
Végigmész a tömb elemein, egyenként megvizsgálod őket, és ha az adott szám páros, akkor belerakod az elemet egy új tömbbe. Jobbat nem tudsz, ilyenkor muszáj végigiterálni a tömb összes elemén, különben honnan tudnád, melyik a páros?
A Jim-Y által említett módszer is pont ezt csinálja, csak ez egy rövidebben leírható módszer ugyanarra, amit írtam. (Azt nem tudom, van-e érdemi sebességbeli előny vagy hátrány a hagyományos for ciklushoz és tömbbe pakolós módszerhez képest.) -
Aureal
őstag
Egy tömb adott elemét közvetlenül le lehet kérni, vagy csak egy ciklussal addig "pullozom", még a kívánt elemszámot el nem érem?
Pl. ha egy 10 elemes tömb 5. elemére van szükségem? -
Köszi mindkettőtöknek!
Majd kipróbálom!
-
dqdb
nagyúr
válasz
fordfairlane #5902 üzenetére
Még while sem kell:
var Hatterek = listFiles("Hatterek", false).split("\n");
var number;if(Hatterek.length > 1) {
number = Math.floor(Math.random() * (Hatterek.length - 2) + 1);
if (number >= global('OldScrBcg')) {
number++;
}
} else if(Hatterek.length == 1) {
number = 1;
}if(number) {
setGlobal('OldScrBcg', number);
setWallpaper(Hatterek[number]);
} -
fordfairlane
veterán
válasz
Mr Dini #5901 üzenetére
1. a var kulcsszót egyszer kell használni a number nevű változó esetében, mondjuk mikor először adsz neki értéket.
2. ha csak egy kép van, a while végtelen ciklust eredményez.
3. Ha number nem lehet nulla, mert a setWallpaper nem nullával indexeli a háttérképeket, akkor egyszerűbb a randomszám generálást úgy megírni, hogy egytől kezdődően dobjon számokat.Math.floor(Math.random() * (max - min)) + min;
azaz jelen esetben
Math.floor(Math.random() * (Hatterek.length - 1)) + 1;
4. Elég a while ciklusban randomszámot generálni, nem kell két Math.random sor.
Szóval ebben a formában valami ilyesmi célszerűbb:
var Hatterek = listFiles("Hatterek", false).split("\n");
var number;
if(Hatterek.length > 1) {
while(number == global('OldScrBcg')) {
number = Math.floor(Math.random() * (Hatterek.length - 1) + 1);
}
} else if(Hatterek.length == 1) {
number = 1;
}
if(number) {
setGlobal('OldScrBcg', number);
setWallpaper(Hatterek[number]);
} -
válasz
Sk8erPeter #5898 üzenetére
Már megoldottam.
Nem. Van egy mappa. Ebben csak képek vannak. A listFiles a Taskerben valami ilyesmit ad vissza:
/Mappa/Kep1.jpg
/Mappa/Kep2.jpg
[…]Na nekem az az ötletem támadt, hogy nyomok egy splittet a \n-re, azaz a sortörésekre és ezt belementem 'i' -be. Ekkor ha pl a /Mappa/Kep1.jpg-t szeretném kiiratni, akkor az i[0] kell nekem. Tehát a tömb nulladik eleme. Namost ennek a tömbnek a lenghtje alapján generáltatok vele egy random számot. (Math.floor) Majd ezt a random számot állítom be háttérnek. Eddig működött a dolog. Viszont azt is szerettem volna, ha az előző háttér tömbbeli értékét ne sorsolja ki még 1x, illetve nulla se legyen az a szám, amit így kapok, erre kellett volna nelem a for. A for azt nézte volna meg, hogy az előzőleg "I" Taskeres globális változóval egyezik-e a most generált szám. Ha igen, akkor addig futtatja, míg más nem lesz a kapott eredmény. Csak közbe rájöttem, hogy az amit összedobtam több sebből vérzik. (Pl a setGlobal a forban
) Ezeket közben kijavítottam és while-ra cseréltem a for-t. Ezt sikerült összehozni, ami működőképesnek látszik:
var Hatterek =listFiles("Hatterek", false).split("\n");
var number = Math.floor( Math.random()*(Hatterek.length));
while(number == global('OldScrBcg')) {
var number = Math.floor(Math.random()*(Hatterek.length));
}
while(number == 0) {
var number = Math.floor(Math.random()*(Hatterek.length));
}
setGlobal('OldScrBcg',number);
setWallpaper(Hatterek[number]);
Új hozzászólás Aktív témák
Hirdetés
- HP Elitebook 840 G3 laptop (14FHD/I5-G6/8GB/256SSD/Matricázott) - Akku X
- Asus Rog Strix Gamer laptop makulátlan állapotban
- ThinkPad T14 Gen4 14" FHD+ IPS érintő Ryzen 5 PRO 7540U 16GB 256GB NVMe ujjlolv IR kam gar
- 16GB-os SODIMM (notebook) DDR4 RAM bazár - nézz be, lesz, ami kell neked!
- HP 15-af105nh laptop (15,6FHD/AmdQuad/4GB/128SSD/Magyar) - Akku X
- Samsung Galaxy A13 64GB, Kártyafüggetlen, 1 Év Garanciával
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7700X 32/64GB RAM RTX 5070 GAMER PC termékbeszámítással
- Bomba ár! HP ZBook Studio G5 - i9-9980H I 32GB I 1TSSD I Nvidia I 15,6" FHD I Cam I W11 I Gar
- ÁRGARANCIA! Épített KomPhone Ryzen 5 5500 16/32/64GB RAM RTX 4060 8GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! Samsung Galaxy S25, Samsung Galaxy S25 Plus, Samsung Galaxy S25 Ultra
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged