Verkettung asynchrone Methodenaufrufe - javascript

Haben Sie ein Prototyp-Objekt Foo mit zwei asynchrone Methodenaufrufe, bar und baz.

var bob = new Foo()

Foo.prototype.bar = function land(callback) {
  setTimeout(function() {
    callback()
    console.log('bar');
  }, 3000);
};

Foo.prototype.baz = function land(callback) {
  setTimeout(function() {
    callback()
    console.log('baz');
  }, 3000);
};

Wollen wir tun, bob.bar().baz() und log - "bar" und "baz" nacheinander.

Wenn Sie nicht ändern Sie die Methode Aufrufe (einschließlich der übergabe in der callback-Funktion), wie kann Sie an einem Standard-callback in diese Methode Aufrufe?

Einige Ideen:

  1. Wrap "bob" mit Dekorator (noch unscharf, wie das umzusetzen, könnte ein kleines Beispiel)

  2. Ändern Konstruktor zum zuweisen von Standard-callback, wenn keine zugewiesen (haben Sie nicht berücksichtigt, wenn dies möglich ist oder nicht)

  3. Einen generator wrapper, der wird weiterhin zu nennen, weiter Verfahren, bis keine mehr übrig sind?

  • Sie können angeben, wie Sie verwenden würden, was Sie verspricht? Sie traten aber nicht sicher, wie Sie Sie anwenden
  • Sind Sie verheiratet bob.bar().baz() syntax? Es gibt viele Möglichkeiten, um den Betrieb Ihrer Beschreibung, aber ich kann nicht an nichts denken, das würde die Arbeit mit diesem speziellen syntax.
  • Übernehmen wir 🙁 ich glaube, wir haben es zum Verpacken irgendwie
  • Verwenden Sie Warteschlangen, wenn Sie die async-code nicht scheitern kann. Verwenden Sie verspricht, wenn man es kann.
  • Haben Sie einen Blick auf stackoverflow.com/q/36242757/1048572. Und Nein, Generatoren absolut nicht helfen Sie hier
  • Bitte haben Sie einen Blick auf dieses Thema: stackoverflow.com/a/39029819

Schreibe einen Kommentar