mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00
worker: implements nits in Web Locks code
PR-URL: https://github.com/nodejs/node/pull/59270 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Filip Skokan <panva.ip@gmail.com>
This commit is contained in:
parent
5d3efaa3c8
commit
5ebfb99a96
1 changed files with 14 additions and 22 deletions
|
@ -3,7 +3,9 @@
|
|||
const {
|
||||
ObjectDefineProperties,
|
||||
Promise,
|
||||
PromisePrototypeThen,
|
||||
PromiseResolve,
|
||||
SafePromisePrototypeFinally,
|
||||
Symbol,
|
||||
SymbolToStringTag,
|
||||
} = primordials;
|
||||
|
@ -15,6 +17,7 @@ const {
|
|||
const {
|
||||
kEmptyObject,
|
||||
lazyDOMException,
|
||||
kEnumerableProperty,
|
||||
} = require('internal/util');
|
||||
const {
|
||||
validateAbortSignal,
|
||||
|
@ -86,8 +89,8 @@ class Lock {
|
|||
}
|
||||
|
||||
ObjectDefineProperties(Lock.prototype, {
|
||||
name: { __proto__: null, enumerable: true },
|
||||
mode: { __proto__: null, enumerable: true },
|
||||
name: kEnumerableProperty,
|
||||
mode: kEnumerableProperty,
|
||||
[SymbolToStringTag]: {
|
||||
__proto__: null,
|
||||
value: 'Lock',
|
||||
|
@ -126,13 +129,13 @@ class LockManager {
|
|||
* @param {boolean} [options.ifAvailable] - Only grant if immediately available
|
||||
* @param {boolean} [options.steal] - Steal existing locks with same name
|
||||
* @param {AbortSignal} [options.signal] - Signal to abort pending lock request
|
||||
* @param {Function} callback - Function called when lock is granted
|
||||
* @param {Function} [callback] - Function called when lock is granted
|
||||
* @returns {Promise} Promise that resolves when the lock is released
|
||||
* @throws {TypeError} When name is not a string or callback is not a function
|
||||
* @throws {DOMException} When validation fails or operation is not supported
|
||||
*/
|
||||
// https://w3c.github.io/web-locks/#api-lock-manager-request
|
||||
async request(name, options, callback) {
|
||||
async request(name, options, callback = undefined) {
|
||||
if (callback === undefined) {
|
||||
callback = options;
|
||||
options = undefined;
|
||||
|
@ -204,7 +207,7 @@ class LockManager {
|
|||
signal.addEventListener('abort', abortListener, { once: true });
|
||||
|
||||
const wrappedCallback = (lock) => {
|
||||
return PromiseResolve().then(() => {
|
||||
return PromisePrototypeThen(PromiseResolve(), () => {
|
||||
if (signal.aborted) {
|
||||
return undefined;
|
||||
}
|
||||
|
@ -224,11 +227,10 @@ class LockManager {
|
|||
);
|
||||
|
||||
// When released promise settles, clean up listener and resolve main promise
|
||||
released
|
||||
.then(resolve, (error) => reject(convertLockError(error)))
|
||||
.finally(() => {
|
||||
signal.removeEventListener('abort', abortListener);
|
||||
});
|
||||
SafePromisePrototypeFinally(
|
||||
PromisePrototypeThen(released, resolve, (error) => reject(convertLockError(error))),
|
||||
() => signal.removeEventListener('abort', abortListener),
|
||||
);
|
||||
} catch (error) {
|
||||
signal.removeEventListener('abort', abortListener);
|
||||
reject(convertLockError(error));
|
||||
|
@ -265,8 +267,8 @@ class LockManager {
|
|||
}
|
||||
|
||||
ObjectDefineProperties(LockManager.prototype, {
|
||||
request: { __proto__: null, enumerable: true },
|
||||
query: { __proto__: null, enumerable: true },
|
||||
request: kEnumerableProperty,
|
||||
query: kEnumerableProperty,
|
||||
[SymbolToStringTag]: {
|
||||
__proto__: null,
|
||||
value: 'LockManager',
|
||||
|
@ -276,16 +278,6 @@ ObjectDefineProperties(LockManager.prototype, {
|
|||
},
|
||||
});
|
||||
|
||||
ObjectDefineProperties(LockManager.prototype.request, {
|
||||
length: {
|
||||
__proto__: null,
|
||||
value: 2,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
Lock,
|
||||
LockManager,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue