37 lines
1016 B
JavaScript
37 lines
1016 B
JavaScript
define("dstore/Promised", [
|
|
'dojo/_base/declare',
|
|
'dojo/Deferred',
|
|
'./QueryResults',
|
|
'dojo/when'
|
|
], function (declare, Deferred, QueryResults, when) {
|
|
// module:
|
|
// this is a mixin that can be used to provide async methods,
|
|
// by implementing their sync counterparts
|
|
function promised(method, query) {
|
|
return function() {
|
|
var deferred = new Deferred();
|
|
try {
|
|
deferred.resolve(this[method].apply(this, arguments));
|
|
} catch (error) {
|
|
deferred.reject(error);
|
|
}
|
|
if (query) {
|
|
// need to create a QueryResults and ensure the totalLength is
|
|
// a promise.
|
|
var queryResults = new QueryResults(deferred.promise);
|
|
queryResults.totalLength = when(queryResults.totalLength);
|
|
return queryResults;
|
|
}
|
|
return deferred.promise;
|
|
};
|
|
}
|
|
return declare(null, {
|
|
get: promised('getSync'),
|
|
put: promised('putSync'),
|
|
add: promised('addSync'),
|
|
remove: promised('removeSync'),
|
|
fetch: promised('fetchSync', true),
|
|
fetchRange: promised('fetchRangeSync', true)
|
|
});
|
|
});
|