Yes, the callable promise abstraction is just a bit of effort:
let resolveRef; const promise = new Promise((res) => { resolveRef = res; }); const callback = (data) => { // Do work... resolveRef(data); // This "triggers" the await }; Object.assign(callback, promise);