我如何创建函数队列。这是我需要做的一个例子。
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
我必须在每个函数中执行的语句,这对我不利,原因有很多(单元测试等)。
有没有其他方法可以解决这个问题?