JSFiddle - React, Tailwind, and code Playground
by joplomacedo
JavaScript
function createResolver() {
let resolve;
let reject;
const promise = new Promise( (_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
})
return {
promise,
resolve,
reject
}
}
const orderGroup = {
'placeEnterOrder': (a) => { console.log('placeEnterOrder', a); return 'placeEnterOrder'},
'placeManualExitOrder': () => { console.log('placeManualExitOrder'); return 'placeManualExitOrder'},
'placeStopOrder': () => { console.log('placeStopOrder'); return 'placeStopOrder'},
'cancelEnterOrder': () => { console.log('cancelEnterOrder'); return 'cancelEnterOrder'},
'cancelStopOrder': () => { console.log('cancelStopOrder'); return 'cancelStopOrder'},
'exitAll': () => { console.log('exitAll'); return 'exitAll'},
'exitPartial': () => { console.log('exitPartial'); return 'exitPartial'},
}
let isInExecution = null;
let executionQueue = [];
[
'placeEnterOrder',
'placeManualExitOrder',
'placeStopOrder',
'cancelEnterOrder',
'cancelStopOrder',
'exitAll',
'exitPartial',
].forEach( methodName => {
const originalMethod = orderGroup[methodName].bind(orderGroup);
orderGroup[methodName] = function ( ...params ) {
const resolver = createResolver();
executionQueue.push( () => {
Promise.resolve(originalMethod(...params)).then( result => {
if ( executionQueue.length ) {
executionQueue.shift()();
console.log(executionQueue);
} else {
isInExecution = false;
...