Frage

(Diese Frage ist wirklich nicht auf die Sprache beschränkt, so wenden Sie sich bitte Lösung in anderen Sprachen zu verfassen.)

Ich habe mich nur gefragt, ob es möglich sei, so etwas in JavaScript zu schreiben:

// Wait 3 seconds and then say our message in an alert box
wait(3).then(function(){alert("Hello World!");});

Wo die traditionelle Art und Weise zu schreiben wäre

// Wait 3 seconds and then say our message in an alert box
setTimeout(function(){alert("Hello World!");}, 3000);

Sorry, wenn dies ist eine noob Frage: p

War es hilfreich?

Lösung

Sie können schreiben einfach:

function wait(delay) {
  return {
    then: function (callback) {
      setTimeout(callback, delay*1000);
    }
  };
}

wait(3).then(function(){alert("Hello World!");});

Wenn Sie in tief gehen wollen, empfehle ich Ihnen über currying und Teilfunktion Anwendung , sind diese Themen wirklich interessant.

Andere Tipps

Noch eine andere Version, ohne Verschluss:

function wait(seconds) {
    if(this instanceof wait)
        this.delay = seconds;
    else return new wait(seconds);
}

wait.prototype.then = function(callback) {
    setTimeout(callback, this.delay * 1000);
};

Mit etwas mehr Code, können Sie auch die Funktionen wiederholt aufrufen:

function wait(seconds) {
    if(this instanceof wait)
        this.delay = seconds;
    else return new wait(seconds);
}

wait.prototype.then = function(callback) {
    setTimeout(callback, this.delay * 1000);
    return this;
};

wait.prototype.wait = function(seconds) {
    this.delay += seconds;
    return this;
};

var start = new Date;
function alertTimeDiff() {
    alert((new Date - start)/1000);
}

wait(1).then(alertTimeDiff).wait(3).then(alertTimeDiff);

Chaining wird eher verwendet, um mehrere Methoden auf einem Objekt auszuführen. So würden Sie eher die Funktion als Objekt betrachten und das Timeout gibt:

Function.prototype.callAfter = function(delay) {
    setTimeout(this, delay*1000);
};

(function(){alert("Hello World!");}).callAfter(3);

Wenn Sie das tun OO Javascript, dann ja, können Sie Methode Verkettungs tun.

Einige der beliebtesten JavaScript-Frameworks tun. jQuery tut dies, indem das jQuery-Objekt für Funktionen zurückkehren, die in der Regel keinen Wert zurückgeben würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top