Wrap `FutureOr` callback in request handler

This commit is contained in:
Simon Binder 2022-12-02 11:42:12 +01:00
parent 8ce8f6a6fc
commit 8c8c54e992
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
1 changed files with 4 additions and 16 deletions

View File

@ -148,22 +148,10 @@ class DriftCommunication {
/// [handler] returns a [Future], it will be awaited.
void setRequestHandler(dynamic Function(Request) handler) {
incomingRequests.listen((request) {
try {
final result = handler(request);
if (result is Future) {
result.then(
(value) => respond(request, value),
onError: (e, StackTrace s) {
respondError(request, e, s);
},
);
} else {
respond(request, result);
}
} catch (e, s) {
respondError(request, e, s);
}
Future.sync(() => handler(request)).then(
(result) => respond(request, result),
onError: (Object e, StackTrace s) => respondError(request, e, s),
);
});
}
}