sp_storage property

String sp_storage
getter/setter pair

Implementation

static var sp_storage = '''
class SpStorage {
    static callbackBuffer = new Map();

    static set(key, value) {
        let json = {
            'key': key,
            'value': value
        };
        let jsonString = JSON.stringify(json);
        ChannelSave.postMessage(jsonString);
    }

    static get(key) {
        let json = {
            'id': generateRandomId(6),
            'key': key,
            'callbackFun': 'SpStorage.onGetValue'
        };
        let sp = new SpStorage();
        let promise = new Promise((resolve, reject) => {
            sp.resolve = resolve;
            sp.reject = reject;
        });
        SpStorage.callbackBuffer.set(json['id'], sp);

        let jsonString = JSON.stringify(json);
        ChannelRead.postMessage(jsonString);

        setTimeout(() => {
            if (HttpSender.senderBuffer.has(json['id'])) {
                HttpSender.senderBuffer.delete(json['id']);
                sender.reject('');
            }
        }, 1000);

        return promise;
    }

    static onGetValue(jsonString) {
        try {
            let jsonObj = JSON.parse(jsonString);
            let sp = SpStorage.callbackBuffer.get(jsonObj.id);
            if (sp !== undefined) {
                sp.resolve(Base64.decode(jsonObj.value));
                SpStorage.callbackBuffer.delete(jsonObj.id);
            } else {
                console.log('sp undefined');
            }
        } catch(e) {
            console.log('onGetValue error:', e);
        }
    }
}''';