YDN-DB与多个延期(YDN-DB with multiple deferred)

2019-09-29 06:33发布

我试着去使用多个延期使用jQuery $。当,但到目前为止没有运气,这是我的代码:

var req = $.when(db.count('items'),db.values('items'),db.get('config', 1));

req.done(function(count,r,config) {
  var currency = config.currency;
  if(count > 0){
    var n = r.length;
    for (var i = 0; i < n; i++) {                   
      var id    = r[i].id;
      var itemId = r[i].itemId;
      console.log('ID: '+id+' itemID: '+itemId+' Currency: '+currency);
    }
  }
});

我的样品没有工作,所以希望你们能帮助我,我到处去寻找一个解决方案。 谢谢

Answer 1:

我懂了。 我会看我如何可以实现的jQuery推迟列表。 虽然YDN-DB的承诺已经donefailthem等,它不是$.Deferred实例。 适配器的做法是要求。

目前,使用事务如下:

var results = {};
var tx_req = db.run(function(tx_db) {
  tx_db.count('items').done(function(x) {
    results.count = x;
  });
  tx_db.values('items').done(function(x) {
    results.values = x;
  });
  tx_db.get('config', 1).done(function(x) {
    results.config = x;
  });
}, ['items', 'config'], 'readonly');

req.done(function() {
  var count = results.count;
  var r = results.values;
  var config = results.config;
  var currency = config.currency;
  if(count > 0){
    var n = r.length;
    for (var i = 0; i < n; i++) {                   
      var id    = r[i].id;
      var itemId = r[i].itemId;
      console.log('ID: '+id+' itemID: '+itemId+' Currency: '+currency);
    }
  }
  results = null;
});

因为所有三个查询在一个事务中运行这是一个有点乱,但更有效。

编辑:

只需要添加promise()方法返回具有对象donefailprogress功能。 应该没有多少开销是可行的。 基本上你可以做这样一个适配器:

var wrap = function(req) {
  req.promise = function() {
    return req; // Note: req has done, fail and progress functions.
    // however, jquery api demand promise to return a new deferred. 
  }
  return req;
}
$.when(wrap(db.count('items')),wrap(db.values('items')),wrap(db.get('config', 1)));

下面是完整的代码中的jsfiddle。

编辑:

从释放0.8.1,加入承诺方法来请求对象,并不再需要包装。 实例 。



文章来源: YDN-DB with multiple deferred