[mod] queueing ausgelagern

This commit is contained in:
fenris 2025-10-24 00:23:53 +02:00
parent c0abe0a180
commit 9e24750d4d

View file

@ -127,16 +127,7 @@ namespace _dali.backend
/** /**
*/ */
var _queue : { var _queue : lib_plankton.call.type_queue<type_request, any>;
items : Array<
{
request : type_request;
resolve : ((result : any) => void);
reject : ((reason : any) => void);
}
>;
busy : boolean;
};
/** /**
@ -160,10 +151,9 @@ namespace _dali.backend
) )
*/ */
); );
_queue = { _queue = lib_plankton.call.queue_make<type_request, any>(
"items": [], call_real
"busy": false, );
};
return Promise.resolve<void>(undefined); return Promise.resolve<void>(undefined);
} }
@ -263,56 +253,14 @@ namespace _dali.backend
&& &&
(http_response.status_code < 300) (http_response.status_code < 300)
) )
) { )
return Promise.reject<any>(http_response.body.toString());
}
else {
const output : any = lib_plankton.json.decode(http_response.body.toString());
return Promise.resolve<any>(output);
}
}
/**
*/
async function process(
)
: Promise<void>
{
if (_queue.busy)
{ {
// do nothing return Promise.reject<any>(http_response.body.toString());
} }
else else
{ {
_queue.busy = true; const output : any = lib_plankton.json.decode(http_response.body.toString());
while (_queue.items.length > 0) return Promise.resolve<any>(output);
{
const entry = _queue.items.shift();
let successful : boolean;
let reason : any;
let result : any;
try
{
result = await call_real(entry.request);
successful = true;
}
catch (error)
{
reason = error;
successful = false;
}
if (successful)
{
entry.resolve(result);
}
else
{
entry.reject(reason);
}
}
_queue.busy = false;
// process();
} }
} }
@ -331,19 +279,18 @@ namespace _dali.backend
"action": action, "action": action,
"input": input, "input": input,
}; };
const promise : Promise<any> = new Promise<any>( return (
(resolve, reject) => { new Promise<any>(
_queue.items.push( (resolve, reject) => {
{ lib_plankton.call.queue_add<type_request, any>(
"request": request, _queue,
"resolve": resolve, request,
"reject": reject, resolve,
} reject
); );
} }
)
); );
process();
return promise;
} }