Javascript in a webbrowser.
There is an async
event handler. Inside this event handler a try/catch
is used. Inside the try
block an asynchoronous functions is called synchronously with await
.
Inside the catch
block the caught data should be processed. But instead of the error, it catches a rejected Promise with PromiseState: 'fullfilled'
and the error it was rejected with as PromiseResult
.
Code:
try {
$(document).ready( async function handleEvent( event ) {
try {
//async function called synchronously
await doSomethingAsync( event );
} catch( xcp ) {
//xcp is of type Promise
//console output shows that it is a Promise with PromiseState: 'fullfilled'
//and the Error as `PromiseResult`
console.error( xcp );
}
});
} catch( xcp ) {
console.error( xcp );
}
async function processAjaxError ( jqXHR, textStatus, errorThrown ) {
let error = new Error ( "textStatus: "+textStatus+", errorThrown: "+errorThrown );
return error;
}
async function doSomethingAsync( event ) {
//using a Promise as return type
return new Promise( function( resolve, reject ) {
let ServerCall = {
url: "example.com",
type: "POST",
data: {},
dataType: 'json',
success: function( data, textStatus, jqXHR ) {
//success -> let the promise resolve
resolve( data, textStatus, jqXHR );
},
error: function( jqXHR, textStatus, errorThrown ) {
//failure -> let the promise reject
let error = processAjaxError( ...arguments );
reject( error );
},
}
$.ajax( ServerCall );
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
Why am I catching the rejected Promise instead of the Error the Promise was rejected with?