Я пытаюсь реализовать indexedDB. Для этого мне нужно использовать $.Deferred
, чтобы получить статус создания базы данных. Но проблема в том, что Differed
работает не так, как ожидалось. Here is the fiddle, вы можете найти процесс в консоли.jQuery.Deferred() не работает должным образом
А вот код:
$(function($) {
var table = 'price';
$.when(dbConnection('cw', table)).done(function(db) {
console.log(db);
var data = [];
dbInsert(db, data, table);
});
function dbConnection(dbname, table) {
var dfd = $.Deferred();
var request = indexedDB.open(dbname);
request.onupgradeneeded = function() {
// The database did not previously exist, so create object stores and indexes.
var db = request.result;
var store = db.createObjectStore(table, {
keyPath: "id"
});
var styleCode = store.createIndex("style_code", "style_code");
var colorCode = store.createIndex("color_code", "color_code");
var size = store.createIndex("size", "size");
var price1 = store.createIndex("price1", "price1");
};
request.onsuccess = function() {
db = request.result;
console.log(request.result);
dfd.resolve(db);
return dfd.promise();
};
request.onerror = function() {
report(request.error);
console.log(request.error);
dfd.resolve(null);
return dfd.promise();
};
request.onabort = function() {
report(request.error);
console.log(request.error);
dfd.resolve(null);
return dfd.promise();
};
}
function dbInsert(db, data, table) {
var tx = db.transaction(table, "readwrite");
var store = tx.objectStore(table);
$.each(data, function(i, rows) {
var style = rows['style-code'],
color = rows['color-code'],
size = rows['size'],
price = rows['price1'];
store.put({
id: i,
style_code: style,
color_code: color,
size: size,
price1: price
});
});
tx.oncomplete = function() {
console.log('Data inserted successfully.');
};
}
})(jQuery);
ли я делаю что-то неправильно? или я ничего не пропустил в этом коде ?. Может кто-нибудь сказать мне, что не так в этом коде.
Почему downvote? Этот вопрос предоставляет все необходимое для его решения (в том числе JSFiddle). +1 –
Вниз избирателей, Пожалуйста, подумайте, чтобы прокомментировать причину downvote ..... – james
Примечание: вы должны действительно использовать 'reject' для двух случаев ошибок, если только вы на самом деле не хотите использовать' null' db. –