Synchronous errors thrown by async methods
Handle synchronous errors thrown by asynchronous methods in the Instant Games SDK.
To handle asynchronous errors only, refer to Asynchronous errors.
Async methods throwing JsException and APIError
Asynchronous methods can throw synchronous exceptions, which occur when the method is called, and asynchronous exceptions, which occur when the returned task is awaited.
For example, the endpoint FBInstant.Player.SetDataAsync throws JsException synchronously if the string provided isn't valid JSON:
// throws JsException:
var task = FBInstant.Player.SetDataAsync("{ invalid JSON }");
But it can also throw APIError asynchronously for a variety of reasons, for example, if a previous call to the endpoint hasn't yet completed:
// doesn't throw:
var task = FBInstant.Player.SetDataAsync("{ \"myKey\": \"my value\" }");
// throws APIError with ErrorCode.PENDING_REQUEST:
await task;
Error handling
To handle both synchronous and asynchronous errors, you can do either of the following:
Use separate
tryblocks for the two phases of execution (calling the function, then awaiting the task).Combine the two phases in a single expression that both calls the function and awaits the result, using a single
tryblock and multiplecatchblocks:try { await FBInstant.Player.SetDataAsync(someString); } catch (APIError e) { // handle the various kinds of APIError the endpoint might throw } catch (JsException e) { // handle invalid JSON }Note
In this example, the
catchblock forAPIErrormust precede that forJsExceptionbecauseAPIErrorderives fromJsException.