Created
February 7, 2015 21:27
-
-
Save paldepind/abd3ce3ce5508541c77f to your computer and use it in GitHub Desktop.
Promise inside IndexedDB transactions test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var openRequest = indexedDB.open("library"); | |
openRequest.onupgradeneeded = function() { | |
// The database did not previously exist, so create object stores and indexes. | |
var db = openRequest.result; | |
var store = db.createObjectStore("books", {keyPath: "isbn"}); | |
var titleIndex = store.createIndex("by_title", "title", {unique: true}); | |
var authorIndex = store.createIndex("by_author", "author"); | |
// Populate with initial data. | |
store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); | |
store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); | |
store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678}); | |
}; | |
function getByTitle(tx, title) { | |
return new Promise(function(resolve, reject) { | |
var store = tx.objectStore("books"); | |
var index = store.index("by_title"); | |
var request = index.get("Bedrock Nights"); | |
request.onsuccess = function() { | |
var matching = request.result; | |
if (matching !== undefined) { | |
// A match was found. | |
resolve(matching); | |
} else { | |
// No match was found. | |
console.log('no match found'); | |
} | |
}; | |
}); | |
} | |
openRequest.onsuccess = function() { | |
var db = openRequest.result; | |
var tx = db.transaction("books", "readonly"); | |
getByTitle(tx, "Bedrock Nights").then(function(book) { | |
console.log('First book', book.isbn, book.title, book.author); | |
return getByTitle(tx, "Quarry Memories"); | |
}).then(function(book) { | |
console.log('Second book', book.isbn, book.title, book.author); | |
// With native promises this gives the error: | |
// InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable | |
// With bluebird everything is fine | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment