我有以下代码,它InvalidStateError
在Firefox中抛出一个(调用时objectStore
)。消息是A mutation operation was attempted on a database that did not allow mutations.
。
奇怪的是,当我将事务的创建放在getBlob
回调中时,它似乎可以工作。
function saveFile( fileEntry ) {
var transaction = this;
transaction.onerror = function( event ) {
console.log( event );
};
fileEntry.getBlob( "", function( blob ) {
var store = transaction.objectStore( STORE_NAME );
try {
var request = store.put( blob, fileEntry.getFullname() );
request.onsuccess = function( event ) {
console.log( "file: " + fileEntry.getFullname() );
++(progressBar[0].value);
};
request.onerror = function( event ) {
console.log( "error in file " + event );
++(progressBar[0].value);
};
} catch( ex ) {
console.log("getBlob " + ex );
}
}, function() {
}, true );
}
function saveRecursive( dirEntry, missingFiles ) {
var db = this;
var transaction = db.transaction( [STORE_NAME],
MODES.READ_WRITE );
for( var i in dirEntry.children ) {
var entry = dirEntry.children[i];
if( entry.directory ) {
createDirectory( dirEntry, entry );
saveRecursive.call( db, entry, missingFiles );
continue;
}
var index = missingFiles.indexOf( entry.getFullname() );
if( index == -1 )
continue;
// Still missing - add
missingFiles.splice( index, 1 );
saveFile.call( transaction, entry );
}
}
有人可以向我解释一下,为什么这不起作用?