The argument to OO.ui.Process() can be a jQuery promise, but not a native promise. This makes Process a bit annoying to use with modern async/await syntax:
new OO.ui.Process( async function () { throw new Error(); } ).execute().then( () => console.log("success"), () => console.log("fail") ); // logs "success"
Workaround:
new OO.ui.Process( $.when( ( async function () { throw new Error(); } )() ) ).execute().then( () => console.log("success"), () => console.log("fail") ); // logs "fail"
I think this should be fairly straightforward to fix: in the two places where Process.js checks if typeof something.promise === 'function', check for typeof something.then === 'function' instead and then wrap it in $.when() to turn the Thenable into a jQuery Promise as the rest of the code expects.