feat(rednote): add isolated persistent browser H5 entry
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
'use strict';
|
||||
// Rednote-only admission control. Includes JSON consumption in the critical section.
|
||||
module.exports = function providerGate(fetchImpl, maxPending = 4) {
|
||||
let tail = Promise.resolve(), pending = 0;
|
||||
return function (...args) {
|
||||
if (pending >= maxPending) return Promise.reject(Error('Detection queue is full'));
|
||||
pending++;
|
||||
const result = tail.then(async () => {
|
||||
args[1]?.signal?.throwIfAborted();
|
||||
const response = await fetchImpl(...args);
|
||||
const data = await response.json();
|
||||
return { ok: response.ok, status: response.status, json: async () => data };
|
||||
});
|
||||
tail = result.catch(() => {}).finally(() => { pending--; });
|
||||
return result;
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user