import { observe, LazyPromise } from "@daiso-tech/core/async";
import { AsyncHooks, TimeSpan } from "@daiso-tech/core/utilities";
await new AsyncHooks(
// Lets pretend this function can throw and takes time to execute.
async (a: number, b: number): Promise<number> => {
const shouldThrow1 = Math.round(Math.random() * 100);
if (shouldThrow1 > 50) {
throw new Error("Unexpected error occured");
}
await LazyPromise.delay(TimeSpan.fromMilliseconds(Math.random() * 1000));
const shouldThrow2 = Math.round(Math.random() * 100);
if (shouldThrow2 > 50) {
throw new Error("Unexpected error occured");
}
return a / b;
},
observe({
onStart: (data) => console.log("START:", data),
onSuccess: (data) => console.log("SUCCESS:", data),
onError: (data) => console.error("ERROR:", data),
onFinally: (data) => console.log("FINALLY:", data),
})
)
.invoke(20, 10);
// Will log when the function execution has started and the arguments.
// Will log if the function succeded, the arguments and the return value.
// Will log if the function errored, arguments and the error.
// Will log the execution time and arguments
The
observe
middleware tracks an async function's state and runs callbacks when it fails with an error or succeeds.IMPORT_PATH:
"@daiso-tech/core/async"