Karsten M.: callback in synchrone abfrage umwandeln

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

  1. 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

    --
    RFC 2324, Satz 7 (Sicherheit): Jeder, der zwischen meinem Kaffee und mir steht, gilt als unsicher.
  2. 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

    1. Super,
      Genau das wollte ich erreichen,

      besten Dank!