use*_*776 2 asynchronous functional-programming async-await typescript
这里我有一个函数,可以很好地捕获同步错误,并在重新抛出错误之前对它们进行处理。
function logExceptions<T extends (...args: any[]) => any>(func: T): (...funcArgs: Parameters<T>) => ReturnType<T> {
return (...args: Parameters<T>): ReturnType<T> => {
try {
return func(...args);
} catch (err) {
console.log(func.name + " caused an error")
throw err;
}
};
}
function syncExample() {
throw new Error()
}
logExceptions(syncExample)();
Run Code Online (Sandbox Code Playgroud)
控制台日志
“syncExample 导致错误”
我可以重写此函数以使其与异步无关并且也适用于异步函数吗?
async function asyncExample() {
throw new Error()
}
logExceptions(asyncExample)();
Run Code Online (Sandbox Code Playgroud)
所需的控制台.log
“asyncExample 导致错误”
实际的console.log
””
我可以重写此函数以使其与异步无关并且也适用于异步函数吗?
不。虽然您可以尝试重载它并检测该函数是否会返回承诺,但这是非常脆弱的。最好编写一个单独的函数来包装异步函数:
function logExceptions<T extends any[], U>(func: (...args: T) => PromiseLike<U>): (...args: T) => Promise<U> {
return async (...args) => {
try {
return await func(...args);
} catch (err) {
console.log(func.name + " caused an error")
throw err;
}
};
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1134 次 |
最近记录: |