Reinhard: Ajax Method Chaining

Beitrag lesen

Hallo zusammen,

ich probiere immer mal wieder was neues mit JavaScript aus; gestern wollte ich folgendes hinkriegen:
Ich habe eine Funktion, in der ich mit Ajax eine Datei einlesen und das Resultat anschließend zurückgeben möchte, um es dann – ganz im jQuery-Style – weiterverarbeiten zu können. So ungefähr:

var ajax = function(url, settings) {
    var async = (typeof settings.async === 'undefined') ? true : settings.async;
    var xhr = new XMLHttpRequest();
    xhr.overrideMimeType('text/plain; charset=UTF-8');
    xhr.onreadystatechange = function() {
        if (xhr.readyState !== 4)
          return;
        if (xhr.status === 200)
          settings.success.call(xhr, xhr);
         else
          settings.error.call(xhr, xhr);
    };
    xhr.open('GET', url + '?nocache=' + new Date().getTime(), async);
    xhr.send(null);
};
function ersteZeile(url) {
    ajax(url, {
        success: function(xhr) {
            // yay, alles okay
            // return xhr.responseText.split('\n')[0];
        },
        error: function(xhr) {
            // ups, fehler
            // return '';
        }
    });
}

var z = ersteZeile('meineTextdatei.txt').substr(0, 5);

Natürlich geht das ja nicht so einfach. Man müsste den Ajax-Request synchron erledigen; also so:

function ersteZeile(url) {
    var zeile;
    ajax(url, {
        async: false,
        success: function(xhr) {
            // yay, alles okay
            zeile = xhr.responseText.split('\n')[0];
        },
        error: function(xhr) {
            // ups, fehler
            zeile = '';
        }
    });
    return zeile;
}

So, und an dieser Stelle möchte ich mal die Experten fragen: Gibt es da eine andere, bessere™ Möglichkeit? Synchrones Ajax ist ja nicht so der Hit, wie ich gehört habe. Ich habe mal in Richtung »Promise« geschaut, aber soweit ich das nach ein paar mal durchlesen beurteilen kann ginge das Chaining damit auch nicht.

Reinhard