我试图使用多个延迟与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);
}
}
});
我的样本没有用,所以希望你们能帮助我,我到处寻找解决方案。感谢
答案 0 :(得分:0)
我明白了。我将看到如何实现jquery延迟列表。虽然ydn-db promise有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()
method即可返回具有done
,fail
和progress
函数的对象。应该可行,没有太多开销。基本上你可以做一个像:
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中的complete code。
编辑:
从版本0.8.1开始,promise方法被添加到请求对象中,不再需要包装。 Example