Ошибка в отображении React при сбое JSON .parse на локальном хранилище - PullRequest
0 голосов
/ 27 марта 2020

У меня есть приложение реагирования, которое использует локальное хранилище для поддержания своего состояния с помощью файлов cookie, но когда существует повар ie, имеющий неправильное значение, ошибки кода приводят к разрыву всего приложения. Я точно не знаю, в чем проблема cook ie, но некоторые cookie-файлы могут вызывать сбой `JSON .parse (localStorage [key]).

const getLocalStorage = () => {
    const storage = R.compose(
        R.fromPairs,
        R.map(([key]) => [key, JSON.parse(localStorage[key])]),
        R.toPairs, // [[key, value], [key, value]]
    )(localStorage);

    return storage;
};

Я хотел бы просто добавить обработку ошибок, чтобы куки, которые не могут быть проанализированы, игнорировались, но я не уверен, как это сделать в этом синтаксисе. Как я могу исправить код, чтобы в случае сбоя JSON.parse он не ломался?

1 Ответ

0 голосов
/ 27 марта 2020

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

const getLocalStorage = () => {
    const storage = R.compose(
        R.fromPairs,
        R.filter([key] => {
            try{
                JSON.parse(localStorage[key]);
                return true;
            }
            catch(error){
                console.log(error);
                return false;           
            }
        }).map(([key]) => [key, JSON.parse(localStorage[key])]),
        R.toPairs, // [[key, value], [key, value]]
    )(localStorage);

    return storage;
};

Или вы можете попробовать использовать массив .reduce () вот так:

const getLocalStorage = () => {
    const storage = R.compose(
        R.fromPairs,
        R.reduce((acc, curr) => 
        {
            try{
                acc.push[[key, JSON.parse(localStorage[key])]];
            }
            catch(error){
                console.log(error);         
            }
            return acc;
        }),
        R.toPairs, // [[key, value], [key, value]]
    )(localStorage);

    return storage;
};
...