具有多个延迟的YDN-DB

我试图使用多个延迟与jquery $ .when,但到目前为止没有运气,这是我的代码:

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); } } }); 

我的样本没有用,所以希望你们能帮助我,我到处寻找解决方案。 谢谢

我知道了。 我将看到如何实现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()方法即返回已donefailprogressfunction的对象。 应该没有太大的开销。 基本上你可以做一个适配器,如:

 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开始,promise方法被添加到请求对象中,不再需要包装。 例子 。