检查 localStorage.removeItem() 是否成功

nov*_*ain 3 javascript local-storage

如果我使用删除项目localStorage.removeItem("key");,有什么方法可以检查删除是否成功?诸如回调或承诺之类的东西?

现在我这样做:

if(localStorage.getItem("key"))
    localStorage.removeItem("key");
else
    console.log("Error");
Run Code Online (Sandbox Code Playgroud)

这是正确的方法还是可以以“更好”的方式完成?

pax*_*blo 5

removeItem()电话不返回任何失败的指示1任何种类(摘自摘录最近编辑的W3C的存储规范的草案,与我的重点):

removeItem(key)方法必须使具有给定键的键/值对从与对象关联的列表中删除(如果存在)。如果不存在具有该键的项,则该方法不得执行任何操作。

因此,判断密钥是否是实际删除的唯一方法(与上面第二句中的“什么都不做”操作相反)是先检查它。

您几乎肯定应该getItem()针对null===当然)使用显式检查返回值,但这不会改变您无法检测removeItem()自身失败的事实1

当然,如果您担心用这些代码片段填充您的代码,您完全可以定义一个函数来为您完成繁重的工作,例如:

function removeExistingItem(key) {
    if (localStorage.getItem(key) === null)
        return false;
    localStorage.removeItem(key);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

然后用更简洁的方式调用它:

if (! removeExistingItem("key"))
    console.log("Error");
Run Code Online (Sandbox Code Playgroud)

1这是基于“失败”被定义为不存在的关键(这似乎是您在问题中使用的定义)。实际上,不能仅仅因为它在项目不存在的情况下什么都不做removeItem() 失败(见上面的插图)。