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).