2015-07-16 6 views
0

Если я удалю элемент, используя localStorage.removeItem("key");, есть ли способ проверить, было ли удаленное удаление или нет? Что-то вроде обратного вызова или обещания?проверьте, был ли localStorage.removeItem() был успешным

Прямо сейчас я делаю так:

if(localStorage.getItem("key")) 
    localStorage.removeItem("key"); 
else 
    console.log("Error"); 

Является ли это правильный способ сделать это, или это могло быть сделано в «лучше» способом?

ответ

3

Звонок removeItem() не возвращает никаких указаний об отказе от любой сортировать (отрывок из a recent editor's draft of the W3C web storage specification, с моим упором):

Метод removeItem(key) должен привести к тому, что пара ключ/значение с заданным ключом будет удалена из списка, связанного с объектом, если он существует. Если элемент с этим ключом не существует, метод ничего не должен делать.

Следовательно, единственный способ узнать, если ключ был фактическое удаление (в отличие от «ничего не делать» действия во втором предложении выше), чтобы проверить его первым.

Вы почти наверняка использовать явную проверку значения getItem() возврата против null===, конечно), но это не меняет тот факт, что вы не можете обнаружить неисправность с removeItem()сама 1.

Конечно, если вы беспокоитесь о пересыпая свой код с этими фрагментами, вы вполне в состоянии определить функцию, чтобы сделать тяжелую работу за вас, что-то вроде:

function removeExistingItem(key) { 
    if (localStorage.getItem(key) === null) 
     return false; 
    localStorage.removeItem(key); 
    return true; 
} 

, а затем вызвать это с более емким:

if (! removeExistingItem("key")) 
    console.log("Error"); 

Это основано на «провал» определяется как ключ не существует (как представляется, определение вы используете в вопросе). В действительности, removeItem()не может сбой просто потому, что он ничего не сделает в случае, когда элемент не существует (см. Вставку выше).

+0

Спасибо, именно то, что я хотел знать. – novalain

1

Более точная проверка будет, как показано ниже, в противном случае, если значение key было "" (пустая строка), то она не будет выполнена

if (localStorage.getItem("key") !== null) { 
    localStorage.removeItem("key"); 
} else { 
    console.log("Error"); 
} 

Storage.getItem() вернется null, если ключ не найден

+0

Да, спасибо, однако, я полагаю, вы имеете в виду, если (localStorage.getItem («ключ»)!] Null) – novalain

+0

@novalain yes .. –

Смежные вопросы