encadeando chamadas de método assíncrono - javascript

Você tem um objeto de protótipo Foo com duas chamadas de método assíncronas, bar e 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);
};

Queremos fazer bob.bar (). Baz () e fazer com que ele registre "bar" e "baz" sequencialmente.

Se você não pode modificar as chamadas de método (incluindo a passagem de sua função de retorno de chamada), como você pode passar um retorno de chamada padrão para essas chamadas de método?

Algumas ideias:

Enrole "bob" com o decorador (ainda confuso sobre como implementar, poderia usar um pequeno exemplo)

Modifique o construtor para atribuir retorno de chamada padrão se nenhum atribuído (não considerou se isso é possível ou não)

Use um invólucro de gerador que continuará a chamar o próximo método até que nenhum seja deixado?

questionAnswers(3)

yourAnswerToTheQuestion