Currently, lock.asyncHold() isn't specced to take any arguments. It just returns a promise, and you pass the code you want to operate under the lock to the .then() method. This is problematic - it requires promise subclassing, and has some unintuitive and probably unexpected behavior.
For example, this code doesn't lock anything at all:
const p = lock.asyncHold();
...never call .then()...
This is extremely different from lock.hold(cb);
, which immediately acquires the lock (and calls the cb with it held).