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