В чем можно хранить данные в приложении Electron?

396
25 декабря 2016, 22:12

Мне нужно быстро сохранять и получать данные из хранилища. На данный момент я хочу использовать electron-json-storage.

Вот так на данный момент выглядит функция возврата значения по ключу:

get: function(key) {
    var value;
    var done = false;
    storage.get(key, function(error, data) {
        if (error) {
            console.log("Get.Err. "+key+" : "+error);
        }
        console.log("Get "+key+" : "+data.Key+" - "+data.Key.pubKey);
        value = data.Key;
        done = true;
    });
    //require('deasync').loopWhile(function(){return !done;});
    return value;
}

Однако из-за того, что результат не возвращается напрямую, функция get возвращает undefined.

Я хотел использовать модуль deasync, но тогда выскакивает ошибка как тут. Я думал об использовании electron-config, только там я не смог сохранить и получить обратно ArrayBuffer.

Что делать? Может использовать локальную БД?

Обновление

Возвращать Promise или принимать колбеки я не могу, поскольку эта функция возвращает значение модулю, который я изменить не могу.

Обновление №2

Я пытался использовать deasync. При использовании выскакивает такая ошибка:

Uncaught Error: Could not locate the bindings file. Tried:
 → C:\path\src\node_modules\deasync\build\deasync.node
 → C:\path\src\node_modules\deasync\build\Debug\deasync.node
 → C:\path\src\node_modules\deasync\build\Release\deasync.node
 → C:\path\src\node_modules\deasync\out\Debug\deasync.node
 → C:\path\src\node_modules\deasync\Debug\deasync.node
 → C:\path\src\node_modules\deasync\out\Release\deasync.node
 → C:\path\src\node_modules\deasync\Release\deasync.node
 → C:\path\src\node_modules\deasync\build\default\deasync.node
 → C:\path\src\node_modules\deasync\compiled\6.5.0\win32\x64\deasync.node

Способ исправления этого я не нашел.

Answer 1

Делай так

// Зависимость deasync
const deasync = require('deasync');
// ....
get: function(key) {
    var value;
    storage.get(key, function(error, data) {
        if (error) {
            console.log("Get.Err. "+key+" : "+error);
        }
        console.log("Get "+key+" : "+data.Key+" - "+data.Key.pubKey);
        value = data.Key;
    });
    // Держим код на месте, пока не получена переменная
    while(value === undefined)
        deasync.runLoopOnce();
    return value;
}
READ ALSO
Одна из точек входа не попадает в сборку

Одна из точек входа не попадает в сборку

При сборке проекта содержимое последней точки входа не попадает в итоговую сборку:

341
Как вызвать метод?

Как вызвать метод?

ЗдравствуйтеПомогите, пожалуйста, разобраться в том, как вызвать метод, который привязан к событию нажатия кнопки

379
overflow у класса fancybox-inner

overflow у класса fancybox-inner

Есть блок - на картинкевозле поля выскакивает блок с ошибкой если она есть

333