reflow catalog.putFile using promises. only notify file listeners when concurrent ops complete
This commit is contained in:
parent
f5c09f4627
commit
b6fb3b314e
3 changed files with 51 additions and 31 deletions
|
|
@ -14,6 +14,7 @@
|
|||
this.listeners = [];
|
||||
this.options = options || {};
|
||||
this.deferredHandler = null;
|
||||
this.concurrent = 0;
|
||||
this.refresh();
|
||||
}
|
||||
|
||||
|
|
@ -82,20 +83,36 @@
|
|||
* @param {Function} [callback]
|
||||
*/
|
||||
putFile(name, vertices, callback) {
|
||||
let mark = Date.now();
|
||||
let store = this;
|
||||
store.db.put('file-'+name, vertices, function(ok) {
|
||||
if (ok) {
|
||||
let pdb = store.db.promise();
|
||||
store.concurrent++;
|
||||
|
||||
function ondone(error) {
|
||||
if (callback) callback(error);
|
||||
if (--store.concurrent === 0) {
|
||||
notifyFileListeners(store);
|
||||
}
|
||||
}
|
||||
|
||||
pdb.put(`file-${name}`, vertices)
|
||||
.then(() => {
|
||||
store.files[name] = {
|
||||
vertices: vertices.length/3,
|
||||
vertices: vertices.length / 3,
|
||||
updated: new Date().getTime()
|
||||
};
|
||||
saveFileList(store);
|
||||
store.decimate(vertices, function(decimated) {
|
||||
store.db.put('fdec-'+name, decimated);
|
||||
if (callback) callback(decimated);
|
||||
return pdb.put('files', store.files);
|
||||
})
|
||||
.then(() => {
|
||||
return new Promise((resolve,reject) => {
|
||||
store.decimate(vertices, resolve);
|
||||
});
|
||||
} else if (callback) callback(ok);
|
||||
});
|
||||
})
|
||||
.then(decimated => {
|
||||
return pdb.put(`fdec-${name}`, decimated)
|
||||
})
|
||||
.then(ondone)
|
||||
.catch(ondone);
|
||||
};
|
||||
|
||||
rename(name, newname, callback) {
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ console.log/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
|||
this._save_timer = setTimeout(() => {
|
||||
this._save_timer = undefined;
|
||||
this.saveState(() => {});
|
||||
}, 150);
|
||||
}, 1500);
|
||||
return;
|
||||
}
|
||||
let widget = this;
|
||||
|
|
|
|||
|
|
@ -54,27 +54,30 @@
|
|||
return this;
|
||||
};
|
||||
|
||||
SP.promise = {
|
||||
keys: (lower, upper) => new Promise(function(resolve, reject) {
|
||||
this.keys(resolve,lower,upper);
|
||||
}),
|
||||
SP.promise = function() {
|
||||
let db = this;
|
||||
return {
|
||||
keys: (lower, upper) => new Promise(function(resolve, reject) {
|
||||
db.keys(resolve,lower,upper);
|
||||
}),
|
||||
|
||||
iterate: (lower, upper, nullterm) => new Promise(function(resolve, reject) {
|
||||
this.iterate(resolve, lower, upper, nullterm);
|
||||
}),
|
||||
iterate: (lower, upper, nullterm) => new Promise(function(resolve, reject) {
|
||||
db.iterate(resolve, lower, upper, nullterm);
|
||||
}),
|
||||
|
||||
get: (key) => new Promise(function(resolve, reject) {
|
||||
this.get(key, resolve);
|
||||
}),
|
||||
get: (key) => new Promise(function(resolve, reject) {
|
||||
db.get(key, resolve);
|
||||
}),
|
||||
|
||||
put: (key, value) => new Promise(function(resolve, reject) {
|
||||
this.put(key, value, resolve);
|
||||
}),
|
||||
put: (key, value) => new Promise(function(resolve, reject) {
|
||||
db.put(key, value, resolve);
|
||||
}),
|
||||
|
||||
remove: (key) => new Promise(function(resolve, reject) {
|
||||
this.remove(key, resolve);
|
||||
})
|
||||
};
|
||||
remove: (key) => new Promise(function(resolve, reject) {
|
||||
db.remove(key, resolve);
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
SP.keys = function(callback, lower, upper) {
|
||||
let out = [];
|
||||
|
|
|
|||
Loading…
Reference in a new issue