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 {
|
const {
|
||||||
ObjectDefineProperties,
|
ObjectDefineProperties,
|
||||||
Promise,
|
Promise,
|
||||||
|
PromisePrototypeThen,
|
||||||
PromiseResolve,
|
PromiseResolve,
|
||||||
|
SafePromisePrototypeFinally,
|
||||||
Symbol,
|
Symbol,
|
||||||
SymbolToStringTag,
|
SymbolToStringTag,
|
||||||
} = primordials;
|
} = primordials;
|
||||||
|
@ -15,6 +17,7 @@ const {
|
||||||
const {
|
const {
|
||||||
kEmptyObject,
|
kEmptyObject,
|
||||||
lazyDOMException,
|
lazyDOMException,
|
||||||
|
kEnumerableProperty,
|
||||||
} = require('internal/util');
|
} = require('internal/util');
|
||||||
const {
|
const {
|
||||||
validateAbortSignal,
|
validateAbortSignal,
|
||||||
|
@ -86,8 +89,8 @@ class Lock {
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectDefineProperties(Lock.prototype, {
|
ObjectDefineProperties(Lock.prototype, {
|
||||||
name: { __proto__: null, enumerable: true },
|
name: kEnumerableProperty,
|
||||||
mode: { __proto__: null, enumerable: true },
|
mode: kEnumerableProperty,
|
||||||
[SymbolToStringTag]: {
|
[SymbolToStringTag]: {
|
||||||
__proto__: null,
|
__proto__: null,
|
||||||
value: 'Lock',
|
value: 'Lock',
|
||||||
|
@ -126,13 +129,13 @@ class LockManager {
|
||||||
* @param {boolean} [options.ifAvailable] - Only grant if immediately available
|
* @param {boolean} [options.ifAvailable] - Only grant if immediately available
|
||||||
* @param {boolean} [options.steal] - Steal existing locks with same name
|
* @param {boolean} [options.steal] - Steal existing locks with same name
|
||||||
* @param {AbortSignal} [options.signal] - Signal to abort pending lock request
|
* @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
|
* @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 {TypeError} When name is not a string or callback is not a function
|
||||||
* @throws {DOMException} When validation fails or operation is not supported
|
* @throws {DOMException} When validation fails or operation is not supported
|
||||||
*/
|
*/
|
||||||
// https://w3c.github.io/web-locks/#api-lock-manager-request
|
// https://w3c.github.io/web-locks/#api-lock-manager-request
|
||||||
async request(name, options, callback) {
|
async request(name, options, callback = undefined) {
|
||||||
if (callback === undefined) {
|
if (callback === undefined) {
|
||||||
callback = options;
|
callback = options;
|
||||||
options = undefined;
|
options = undefined;
|
||||||
|
@ -204,7 +207,7 @@ class LockManager {
|
||||||
signal.addEventListener('abort', abortListener, { once: true });
|
signal.addEventListener('abort', abortListener, { once: true });
|
||||||
|
|
||||||
const wrappedCallback = (lock) => {
|
const wrappedCallback = (lock) => {
|
||||||
return PromiseResolve().then(() => {
|
return PromisePrototypeThen(PromiseResolve(), () => {
|
||||||
if (signal.aborted) {
|
if (signal.aborted) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
@ -224,11 +227,10 @@ class LockManager {
|
||||||
);
|
);
|
||||||
|
|
||||||
// When released promise settles, clean up listener and resolve main promise
|
// When released promise settles, clean up listener and resolve main promise
|
||||||
released
|
SafePromisePrototypeFinally(
|
||||||
.then(resolve, (error) => reject(convertLockError(error)))
|
PromisePrototypeThen(released, resolve, (error) => reject(convertLockError(error))),
|
||||||
.finally(() => {
|
() => signal.removeEventListener('abort', abortListener),
|
||||||
signal.removeEventListener('abort', abortListener);
|
);
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
signal.removeEventListener('abort', abortListener);
|
signal.removeEventListener('abort', abortListener);
|
||||||
reject(convertLockError(error));
|
reject(convertLockError(error));
|
||||||
|
@ -265,8 +267,8 @@ class LockManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectDefineProperties(LockManager.prototype, {
|
ObjectDefineProperties(LockManager.prototype, {
|
||||||
request: { __proto__: null, enumerable: true },
|
request: kEnumerableProperty,
|
||||||
query: { __proto__: null, enumerable: true },
|
query: kEnumerableProperty,
|
||||||
[SymbolToStringTag]: {
|
[SymbolToStringTag]: {
|
||||||
__proto__: null,
|
__proto__: null,
|
||||||
value: 'LockManager',
|
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 = {
|
module.exports = {
|
||||||
Lock,
|
Lock,
|
||||||
LockManager,
|
LockManager,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue