Indexed Database APIを使いやすくするためのライブラリ KageDB その3 - 待ち合わせ
KageDB の紹介です。
今回は待ち合わせです。
joinというメソッドをつかって複数処理を待ち合わせします。こんな感じで使います。以下の例では削除と追加を同時にやっています。
myDB.tx(["person"], function (tx, person) { var requests = [ person.delete(1), // 削除処理 person.add({name: "MARK", age: 20}) // 追加処理 ]; tx.join(requests, function () { console.log("done: join"); // 削除と追加の両方が完了したら呼ばれる }); });
オリジナルAPIだとこんな感じになるはず。どうしても煩雑なコードになりますね。
var person = tx.objectStore("person"); var requests = []; requests.push(person.delete(1)); // 削除処理 requests.push(person.add({name: "MARK", age: 20})); // 追加処理 var len = requests.length; var pending = len; var results = new Array(len); for (var i = 0; i < len && pending > 0; i++) { (function (i) { var req = requests[i]; req.onsuccess = function (event) { var value = event.target.result; results[i] = value; pending--; if (pending === 0) { console.log("done: join"); // 削除と追加の両方が完了したら呼ばれる } }; }(i)); }
動くサンプルコードです。Chromeだと動きます。dump -> join -> dumpと押すと挙動がわかります。
ちなみに、joinという名前は、WinJS.Promise.joinに合わせています。
いずれは、WinJS.Promiseと組み合わせた場合の書き方なんかも紹介する予定です。