javascript - 只有在没有错误的情况下才执行 try 语句
问题描述
我有一条try...catch
语句检查它是否可以为对象的属性赋值,然后将其存储在本地存储中而不超过配额。
我在这里遇到的问题是,如果它超过配额,它仍然为该属性分配了一个新值。
我不确定如何解决这个问题。我尝试过嵌套 try 语句并使用 finally 语句,但我还没有弄清楚。
let storageFiles = JSON.parse(localStorage.getItem('storageFiles')) || {};
const image = document.getElementsByTagName('img')[0];
try {
// I need this block to only be executed if there's no error to catch
// but I will still need to assign the value to the property before
// saving it to local storage
storageFiles.source = image.src;
localStorage.setItem('storageFiles', JSON.stringify(storageFiles));
}
catch(err) {
console.log('Local storage error: ' + err);
}
本质上,我正在寻找的是一种仅在存在或不会出现错误时才执行 try 语句中的代码的方法。
我可以采取不同的方法吗?
解决方案
Storage
界面中没有任何内容可以让您提前检查存储操作是否会成功。JavaScript 中没有任何东西可以让您回滚代码的效果(例如回滚数据库事务)。您必须运行代码。
我在这里遇到的问题是,如果它超过配额,它仍然为该属性分配了一个新值。
我猜你的意思是你解析source
的对象的属性。storageFiles
至少想到两个解决方案:
如果没有保存,您可以保留原始内容并还原更改:
let storageFiles = JSON.parse(localStorage.getItem('storageFiles')) || {}; const image = document.getElementsByTagName('img')[0]; const source = oldSource; try { storageFiles.source = image.src; localStorage.setItem('storageFiles', JSON.stringify(storageFiles)); } catch(err) { storageFiles.source = oldSource; console.log('Local storage error: ' + err); }
失败时重新解析对象:
let storageFiles = JSON.parse(localStorage.getItem('storageFiles')) || {}; const image = document.getElementsByTagName('img')[0]; try { storageFiles.source = image.src; localStorage.setItem('storageFiles', JSON.stringify(storageFiles)); } catch(err) { storageFiles = JSON.parse(localStorage.getItem('storageFiles')) || {}; console.log('Local storage error: ' + err); }
推荐阅读
- c# - 如果在 c# 中缺少,则在字符串中添加前缀
- python - 使用 Bot 打开另一个 Telegram 聊天/群组/频道
- javascript - 提供的目标原点 ('
') 不匹配收件人窗口的来源 (' ') - elasticsearch - 如何在 Logstash Elasticsearch 中编写 while 循环
- .net - 数据库恢复失败(错误详细信息:用户“sa”登录失败)请查看安装指南以完成 candela 安装
- django - Docker 中的 Django:GNU gettext 工具是否仅在开发中需要?
- php - DocuSign:多个收件人,一个签名
- php - 当 Route::fallback 存在时检查路由是否存在
- python - Pandas 添加一个带有字符串的新列,其中单元格匹配特定条件
- docker - .NET Core 2.0 Docker 映像缺失和向后兼容性