【发布时间】:2017-07-04 13:48:53
【问题描述】:
最近我和我的同事讨论了使用try 和catch 来通知错误或避免错误。
这是我同事的做法:
import Config from 'config';
export const getUserFromLocalStorage = () => {
const key = Object.keys(localStorage).find(value => value === `${Config.applicationId}/currentUser`);
try {
return key ? JSON.parse(localStorage[key]) : {};
} catch (e) {
return {};
}
};
这意味着,他不关心给定的错误,他只是携带返回一个对象以继续该过程
我的是:
import Config from 'config';
export const getUserFromLocalStorage = () => {
const key = Object.keys(localStorage).find(value => value === `${Config.applicationId}/currentUser`);
try {
return key ? JSON.parse(localStorage[key]) : {};
} catch (e) {
console.log('the given error', e); // Just simple notifier for this example
}
};
但是我的方法仍然存在一个问题,即它会返回 undefined(这可能会在我的应用程序内部崩溃),可以使用 finally 轻松修复它并返回默认值,但听起来不是对我来说很好的做法。
问题
那么如果需要,使用try catch 和finally 来平衡我的应用程序的稳定性。
我们的方法有问题吗?
特别是,我们无法信任来自localStorage 的数据,那么什么是实现该实现的最佳方法?
【问题讨论】:
-
is that it will return undefined (which can crash internaly my app):您应该记录该方法可能会返回undefined并且您调用它的代码应该能够处理它。同样,您同事的空对象可能会导致调用代码异常。主要是记录在错误状态下返回的内容,并让调用者决定要做什么。 -
不,您不会使用
finally为错误情况返回默认值。 -
@Bergi
finally的效用是什么 -
@JoseAPL 对于无论
try或catch中发生什么都应该执行的事情。您通常不想总是从那里return。突出的用例是关闭资源。 -
@Bergi 是的,我只是忘记了
finally是什么意思:)
标签: javascript web try-catch local-storage web-storage