分かりました。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;
});
少し面倒ですが、3 つのクエリすべてが 1 つのトランザクションで実行されるため、より効率的です。
編集:
、および関数を持つオブジェクトを返すpromise()
メソッドを追加するだけです。多くのオーバーヘッドなしで実行できるはずです。基本的に、次のようなアダプターを実行できます。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の完全なコードを次に示します。
編集:
リリース 0.8.1 から、リクエスト オブジェクトに promise メソッドが追加され、ラッピングが不要になりました。例。