具有多个延迟的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承诺已经done
, fail
和them
等,但它不是$.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()
方法即返回已done
, fail
和progress
function的对象。 应该没有太大的开销。 基本上你可以做一个适配器,如:
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方法被添加到请求对象中,不再需要包装。 例子 。