связывание вызовов асинхронных методов - javascript

У вас есть прототип объекта Foo с двумя вызовами асинхронных методов, bar и 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);
};

Мы хотим сделать bob.bar (). Baz () и сделать так, чтобы в журнале последовательно отображались «bar» и «baz».

Если вы не можете изменить вызовы метода (включая передачу в функцию обратного вызова), как вы можете передать обратный вызов по умолчанию в эти вызовы метода?

Некоторые идеи:

Оберните «bob» декоратором (все еще неясно, как реализовать, можно привести небольшой пример)

Измените конструктор, чтобы назначить обратный вызов по умолчанию, если ни один не назначен (не рассматривал, возможно ли это или нет)

Использовать генераторную обертку, которая будет продолжать вызывать следующий метод, пока не останется ни одного?

Ответы на вопрос(1)

Ваш ответ на вопрос