Files
pathfinder/js/app/promises/promise.timeout.js
Mark Friedrich af59235b73 - new "undo" function for "signature table", closed #218, closed #726
- improved "signature table" added "loading" spinner if table gets updated or data is processed
- improved ajax endpoints for "signatures". Moved into new REST API
- improved ajax endpoints for "structures". Moved into new REST API
- upgraded DB "Cortex", PHP lib `v1.6.0-dev` → `v1.6.0`
- upgraded DB "Schema", PHP lib `v2.2.2` → `v2.2.3`
- upgraded some 3rd party NodeJs packaged (or development) in `package.json`
2019-03-22 17:33:43 +01:00

69 lines
2.2 KiB
JavaScript

define([], () => {
'use strict';
/*
Example1 callback -------------------------------------------------------------------------------------------------
new TimeoutPromise((resolve, reject) => {
request.get(options, (error, response, body) => {
if (!error && response.statusCode === 200) {
resolve(body);
} else {
reject(error);
}
});
}, 2000).then(data => {
console.info((Date.now() - start)/1000, '--data --> = ', data);
}).catch(error => {
console.info((Date.now() - start)/1000, '--error --> = ', error);
});
Example2 DeferredPromise ------------------------------------------------------------------------------------------
let deferredPromise = new DeferredPromise();
new TimeoutPromise(deferredPromise, 2000).then(data => {
console.info((Date.now() - start)/1000, '--data --> = ', data);
}).catch(error => {
console.info((Date.now() - start)/1000, '--error --> = ', error);
});
deferredPromise.resolve('OK');
*/
/**
* Timeout Promise implementation
* -> wraps Promise into TimeoutPromise
* -> rejects Promise after timeout
*
* Example1:
*
*/
return class TimeoutPromise extends Promise {
constructor(callback, timeout = 6000){
let timer;
let promise = callback[Symbol.toStringTag] === 'Promise' ? callback : new Promise(callback);
//let promise = new Promise(callback);
let wrapperPromise = Promise.race([
promise,
new Promise((resolve, reject) => {
timer = setTimeout(timeout => {
reject(new Error('Promise timeout after ' + timeout + 'ms'));
}, timeout, timeout);
}),
]);
super(function(resolve, reject){
wrapperPromise.then(data => {
clearTimeout(timer);
resolve(data);
}).catch(error => {
clearTimeout(timer);
reject(error);
});
});
}
};
});