According the TypeScript definitions, IServiceVector::getMultipleHoldingRegisters() support returning Promise<number[]>.
However, when this is used, the return length check in servertcp_handler.js::300 will always fail. The corresponding code part is:
const values = vector.getMultipleHoldingRegisters(address, length, unitID);
if (values.length === length) {
As values is Promise{[...]} its length check fails and this results in a Modbus exception sent to client instead of the provided read result.
When getMultipleHoldingRegisters() returns number[] directly, without a Promise, everything works as expected.