Helpdesk
Menschen Wissenschaft Politik Mystery Kriminalfälle Spiritualität Verschwörungen Technologie Ufologie Natur Umfragen Unterhaltung
weitere Rubriken
PhilosophieTräumeOrteEsoterikLiteraturAstronomieHelpdeskGruppenGamingFilmeMusikClashVerbesserungenAllmysteryEnglish
Diskussions-Übersichten
BesuchtTeilgenommenAlleNeueGeschlossenLesenswertSchlüsselwörter
Schiebe oft benutzte Tabs in die Navigationsleiste (zurücksetzen).

Programmieren: Hilfe & Austausch

920 Beiträge ▪ Schlüsselwörter: Programm, Code, Html ▪ Abonnieren: Feed E-Mail

Programmieren: Hilfe & Austausch

23.01.2013 um 13:23
@alliswrong

Das löst das Problem nicht :D
Es ändert ja nichts am Ablauf.


@interpreter

Siehst du vielleicht meinen Logikfehler? ;)

Anzeige
melden

Programmieren: Hilfe & Austausch

23.01.2013 um 13:59
@acc

node.js

db.query() ist per default asynchron.

heißt das du nicht garantieren kannst das der Query beendet ist, bevor die Verarbeitung weiter läuft. Das ist auch der Grund warum du ne Callback-Funktion übergeben kannst.


melden

Programmieren: Hilfe & Austausch

23.01.2013 um 14:00
Ok, der Fehler scheint in der dbe-Funktion zu sein. Hab mal eine weitere Debugausgabe dort eingebaut:

var db = require('mysql'); var db_data = {/* ... */}; db = db.createConnection(db_data); db.connect(); init_content(); function init_content () { console.log('func init_content'); var dbe_sql = "SELECT id, path, parent_id FROM content"; var dbe_res = dbe(dbe_sql, []); console.log('func init_content (debug):'); console.dir(dbe_res); } function dbe (sql, stored) { if (typeof sql != "undefined") { console.log('func dbe: ' + sql + ' (' + stored + ')'); var wrk = {}; db.query(sql, stored, function(err, rows, fields) { if (err) console.log('func dbe (error): ' + err); if (!err && typeof rows != "undefined" && typeof fields != "undefined") { console.log('func dbe (debug):'); console.dir({ f: 'zensiert', r: rows }); wrk = { f: 'zensiert', r: rows }; } else { console.log('func dbe (debug): no data'); wrk = { f: '', r: '' }; } }); console.log('func dbe (debug2):'); console.dir(wrk); return wrk; } }

Shell:
node sqltest.js
func init_content
func dbe: SELECT id, path, parent_id FROM content ()
func dbe (debug2):
{}
func init_content (debug):
{}
func dbe (debug):
{ f: 'zensiert',
r:
[ { id: 1, path: 'test', parent_id: 0 },
{ id: 2, path: 'test/1', parent_id: 1 } ] }
Wie man sieht, ist schon wrk bei return leer. Und "dbe debug" kommt immer zuletzt.


melden

Programmieren: Hilfe & Austausch

23.01.2013 um 14:07
@interpreter

Ja, dann muss ich doch das Programm warten lassen. Per while hat das aber nicht funktioniert.


melden

Programmieren: Hilfe & Austausch

23.01.2013 um 14:17
@acc

versuch mal auf synchron umzustellen :)

http://nodejsdb.org/docs/ (Archiv-Version vom 28.01.2013)


melden

Programmieren: Hilfe & Austausch

23.01.2013 um 14:24
@interpreter

Danke, aber soll ja ruhig async bleiben, für mehrere Querys gleichzeitig. Ich weiss nur nicht, wie ich das da mit dem Callback einbauen soll.

Glaub muss gleich mal für Nahrung sorgen, damit mein Hirn wieder arbeiten kann :D


melden

Programmieren: Hilfe & Austausch

23.01.2013 um 15:17
@acc
bin zwar nicht im Thema drin, aber vllt hilft dir das hier weiter?
http://api.jquery.com/jQuery.Callbacks/
bzw. das hier:
http://staticfloat.com/javascript/callback-funktionen-fur-javascript-methoden/ (Archiv-Version vom 09.02.2013)


melden

Programmieren: Hilfe & Austausch

23.01.2013 um 15:34
@alliswrong

Nö, hier gehts um serverseitiges Javascript ;)


melden

Programmieren: Hilfe & Austausch

23.01.2013 um 15:36
@acc
ah gut, hab mir das Thema nicht ganz durchgelesen.

Edit:
Aber du benutzt schon jQuery oder? Die Callbacks funktionieren ja beidseitig gleich.


melden

Programmieren: Hilfe & Austausch

23.01.2013 um 16:22
@alliswrong

Nein, das hat nichts mit jQuery zu tun, das ist Node.js http://nodejs.org/
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.



melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

23.01.2013 um 19:18
hurz

Meine $mysqli->fetch_assoc() Schleife läuft ewig!

$result_jane = $jane->query("SELECT ID, kestraid FROM RELEASES where kestraid IS NOT NULL AND mus = 0 LIMIT $start, $limit"); $get_same_st = $kestra->prepare("SELECT same FROM demos WHERE id = ? LIMIT 1")); $get_same_st->bind_param("i", $kestraid); while ($j_row = $result_jane->fetch_assoc()) { // get same field from kestra $kestraid = $j_row['kestraid']; $get_same_st->execute(); }

Ich sehe einfach den Fehler nicht! Die Schleife läuft ordnungsgemäß durch aber kommt dann nicht zum Schluss, die Seite lädt ewig. Woran könnte das liegen?


melden

Programmieren: Hilfe & Austausch

24.01.2013 um 00:40
@AnGSt


was soll denn die Abbruchbedingung der schleife sein?

und soll das wirklich eine Zuweisung und kein Vergleich sein? (= --> ==)


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

24.01.2013 um 08:40
@interpreter

Es ist eine Zuweisung. PHP testet da auch gleich mit, ob der zugewiesene Wert false ist. Wenn ja, wird die Schleife abgebrochen.


melden

Programmieren: Hilfe & Austausch

24.01.2013 um 09:06
@AnGSt

müsstest du dann nicht $result-jane verändern damit das ergebnis von fetch_assoc sich verändert und die Schleife abbrechen kann?


1x zitiertmelden
Bodo ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

24.01.2013 um 09:19
Bei php.net (http://php.net/manual/en/mysqli-result.fetch-assoc.php) verwenden sie die while-Schleife genauso. Seh auf den ersten Blick auch nix :/

@AnGSt
was genau macht das: "WHERE id = ? LIMIT 1"
Das kommt mir gerade so unbekannt vor. Möchtest mir kurz beschreiben, was das Ding tut? :)

EDIT: Ah, habs schon. Mal Programmier-Wissen wieder auffrischen :note: :D


melden
AnGSt ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

Programmieren: Hilfe & Austausch

24.01.2013 um 09:46
Zitat von interpreterinterpreter schrieb:müsstest du dann nicht $result-jane verändern damit das ergebnis von fetch_assoc sich verändert und die Schleife abbrechen kann?
Das wird durch fetch_assoc() automatisch hoch gezählt.

Ich habe mal testweise statt der while Schleife (die bis ca 30000 geht, da soviele Datensätze) eine for-Schleife bis 400 ein gebaut. Und siehe da: es dauert zwar ungewöhnlich lange, aber es beendet sich. Ich habe mal den Host der Quelldatenbank angemailt ob das Problem vielleicht dort liegt.

Die Zeile die so lange dauer ist:

$get_same_st->execute();

Das liest einen Wert aus der Quelldatenbank.

Klammere ich diese Zeile aus, ist die Schleife auch bei 30000 Iterationen in Sekunden fertig. Die Zieldatenbank liegt bei mir lokal, die Quelldatenbank liegt im web irgendwo. An ein Übertragungsproblem glaube ich aber nicht, da noch viel komplexere Scripts auch schneller sind.


melden

Programmieren: Hilfe & Austausch

24.01.2013 um 10:10
@AnGSt
vielleicht erzeugt die zweite schließende Klammer

$get_same_st=blabla());

oben in der zuweisung das Problem.


melden

Programmieren: Hilfe & Austausch

24.01.2013 um 12:45
@AnGSt

Line 3, ne geschlossene Klammer zuviel: $get_same_st = $kestra->prepare("SELECT same FROM demos WHERE id = ? LIMIT 1"));


melden

Programmieren: Hilfe & Austausch

24.01.2013 um 12:46
@acc

meinst du, ich hab mich zu unklar ausgedrück? :D


melden

Programmieren: Hilfe & Austausch

24.01.2013 um 12:48
@interpreter Achso, du meinst die gleiche Stelle. Bin noch beim ersten Kaffee :D

Btw. zu meinem Problem: Das geht so natürlich nicht, weil non-blocked & async. Dafür gibt es aber anscheinend auch schon was nützliches: https://github.com/caolan/async
Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with node.js, it can also be used directly in the browser.

Async provides around 20 functions that include the usual 'functional' suspects (map, reduce, filter, forEach…) as well as some common patterns for asynchronous control flow (parallel, series, waterfall…). All these functions assume you follow the node.js convention of providing a single callback as the last argument of your async function.



Anzeige

melden