1

関数キューを作成するにはどうすればよいですか。これが私がしなければならないことの例です。

db.connect(); // connecting

db.create({ hello: 'World'}).save(function (success) {
  // Connected ? if so execute this callback immediatly
  // otherwise Queue this whole operation and execute the callback.
});

db.get({ hello: 'World' }, function () {
  // Again connected ? execute immediatly
  // otherwise Queue this whole operation and execute later.
});

私が抱えている問題は、コールバックを保存して実行する方法ではありません。それは簡単です。問題は、操作をどのように記録できるかということです。

確かに私はこれを行うことができます

 db.connect(function () {
   // connected ! do stuff..
 })

しかし、それはコールバック地獄につながります!

これが私の実装です。

 function Database () {}

 Database.prototype.connect = function () {
   // connect here and emit connected.
   var self = this;
   connect(function () {
     self.connected = true;
     self.executeQueue();
   });
 };

Database.prototype.create = function (doc) {
  var self = this;
  // what should i do here ?

  // maybe ?
  if (self.connected) {
    self._save(doc);
  } else {
    self.addToQueue(function () {
     self._save(doc);
    });
  }
};

上記の実装はif機能しますが、問題はすべての関数で実行する必要があるステートメントです。これは多くの理由 (単体テストなど) で私にとって悪いことです。

この問題に取り組むことができる他の方法はありますか?

4

0 に答える 0