callback in synchrone abfrage umwandeln
Karsten M.
- javascript
Hallo,
Ich glaube ich komme an einer Stelle nicht mehr weiter. Und zwar habe ich ein Javascript vorliegen mit einer Callback Funktion. Dabei wird ein Array erstellt. Ich wuerde nun gerne die Funktion in eine synchrone umwandeln. Kann mir einer einen Tip geben, wie man es machen muesste. Hier das kurze Script:
var form = {
aObject: objValue,
selectArr: function (fi, ql, paramList) {
var b = form.aObject;
b.action( function (x) {
x.runGl(ql, paramList,
function (x, glObj) {
//
var dataset = [];
for (var idx in glObj) {
dataset.push(glObj[idx]);
}
// so geht es nicht ;-(
return dataset;
},
null);
});
},
};
// hier die abfrage
var dataList= form.selectArr(aFi,aGL,params);
alert(dataList.length);
Waere sehr dankbar fuer eine Hilfe,
Gruss,
Karsten
Hallo!
Asynchron würde bedeuten, dass die Funktion entweder durch setTimeout/setInterval oder einen Event-Handler von der synchronen Ausführung entfernt wurde.
Damit wir Deinen Fall nachvollziehen können, illustriere bitte, an welchen Stellen aus Deiner Funktion eine Asynchrone wurde.
Gruß, LX
Und zwar habe ich ein Javascript vorliegen mit einer Callback Funktion. Dabei wird ein Array erstellt. Ich wuerde nun gerne die Funktion in eine synchrone umwandeln.
Dann ändere die Methoden »action« und »runGl«, sodass sie synchron arbeiten. Anders kannst du nicht asychronen Code einfach mal in synchronen umwandeln.
Ich vermute, es hat schon seinen Grund, warum da asynchron gearbeitet wird - vermutlich werden I/O-Operationen durchgeführt, die sind üblicherweise und sinnvollerweise asynchron.
Du kannst höchstens asynchron weiterarbeiten, indem du einen Callback an selectArr übergibst, welchen du dort ausführst, wo du »return dataset;« notieren willst.
selectArr: function (fi, ql, paramList, callback) {
...
b.action(function (x) {
x.runGl(ql, paramList, function (x, glObj) {
...
callback(dataset);
}, null);
});
},
form.selectArr(aFi,aGL,params, function (dataList) {
alert(dataList.length);
});
Mathias
Super,
Genau das wollte ich erreichen,
besten Dank!