関数キューを作成するにはどうすればよいですか。これが私がしなければならないことの例です。
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
機能しますが、問題はすべての関数で実行する必要があるステートメントです。これは多くの理由 (単体テストなど) で私にとって悪いことです。
この問題に取り組むことができる他の方法はありますか?