我试试运气,希望这个问题不要太蠢🙃
我正在尝试创建一个函数,当我不想进行错误处理时(即,当我不关心代码是否失败时),它可以帮助我尝试/捕获代码
看起来像:
function failSafe(callback) {
try {
return callback()
} catch(err) {
console.warn(err)
}
}
其实我有一个
failSafeAsync
版本回调是awaited
在返回之前被有效捕获
我正在尝试找到一种解决方案,以对 sync 和 async 代码使用相同的功能。我认为这可以通过适当地操纵承诺来实现,但我不知道怎么做。
你能给我指出正确的方向吗?
您可以使用
async
/await
创建一个统一的 failSafe
函数,适用于同步和异步代码。这是一个示例实现:
async function failSafe(callback) {
try {
if (callback instanceof Function) {
const result = await Promise.resolve(callback());
return result;
} else {
return callback;
}
} catch (err) {
console.warn(err);
}
}
在这个实现中,如果
callback
参数是一个函数,我们await
Promise.resolve(callback())
返回的承诺,这允许我们统一处理同步和异步函数。如果 callback
不是函数,我们只需立即返回它。
下面是一个将此函数与同步和异步函数一起使用的示例:
function syncFunc() {
throw new Error('Sync function failed');
}
async function asyncFunc() {
throw new Error('Async function failed');
}
async function main() {
console.log(await failSafe(() => 42)); // prints "42"
console.log(await failSafe('hello')); // prints "hello"
console.log(await failSafe(syncFunc)); // prints nothing, logs the error to the console
console.log(await failSafe(asyncFunc)); // prints nothing, logs the error to the console
}
main();
我不太确定这是否是您想要实现的目标。如果是这样的话,可能会更具描述性,我们可以为实际问题寻找解决方案。
async function failSafe(callbackFn, isAsync) {
if (!isAsync) {
try {
return callback();
} catch(err) {
console.warn(err);
}
} else {
try {
await return callback();
} catch(err) {
console.warn(err);
}
}
}