最近我和我的同事讨论了关于使用 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 {};
}
};
Wich means, he doesn't care about the given error and he is just carrying of returning an object in order to continue the process
我的是:
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
的数据,那么对于这个实现来说最好的方法是什么?
最佳答案
由于 finally
在任何一种情况下都会执行,无论是否抛出某些东西,它都不是返回默认值的地方。您是否需要非常详细地记录错误也是值得怀疑的。这完全取决于某事是预期错误还是真正的异常情况,以及谁可以对此采取措施。
存储的值是否很有可能是无效的 JSON?在这种情况下,您有一个“备用计划”来做什么?用户和/或开发人员对此无能为力?然后不要打扰任何人。也许您想 console.log
一条可能有助于调试的消息,但除此之外只是继续执行程序流程。如果 a) 用户没有启动操作并且 b) 他们也无能为力,那么肯定没有必要用 alert
来打扰用户。
注意事项:
是否首先
捕获
错误:- 这是程序流程中可能自然发生的预期错误吗?
- 这是一个您可以做些什么的错误吗?
- 如果发现错误,您有什么计划吗?
是否记录错误:
- 这个日志对任何人有好处吗?
- 有人会看到该日志条目吗?
- 它是否为任何人提供了任何有助于解决问题的有用信息?
是否就某事打扰用户:
- 用户是否发起了操作?
- 用户是否期望某种形式的响应,正面的还是负面的?
- 用户可以采取任何措施来解决问题吗?
是返回一个空对象还是什么都不返回/null
/undefined
取决于函数的职责是什么。函数是否定义为总是返回一个对象?然后它应该从 catch
中返回{}
。或者当预期对象不存在时,“无”是有效响应吗?然后可能返回false
。
总的来说,你同事的方法对我来说非常合理。
关于javascript - try-catch 是为了防止还是处理错误? (在javascript中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44823712/