http_sender property

String http_sender
getter/setter pair

Implementation

static var http_sender = '''
class HttpSender {
    static senderBuffer = new Map();

    constructor() {
        this.callback = null;
    }

    sendRequest(json) {
        let jsonString = JSON.stringify(json);
        // console.log(jsonString);
        ChannelHttp.postMessage(jsonString);
    }

    static onHttpResponse(jsonString) {
        try {
            let jsonObj = JSON.parse(jsonString);
            let sender = HttpSender.senderBuffer.get(jsonObj.id);
            if (sender !== undefined) {
                jsonObj.response.data = Base64.decode(jsonObj.response.data);
                jsonObj.response.headers = Base64.decode(jsonObj.response.headers);
                sender.resolve(jsonObj);
                HttpSender.senderBuffer.delete(jsonObj.id);
            } else {
                console.log('sender undefined');
            }
        } catch(e) {
            console.log('onHttpResponse error:', e);
        }
    }

    static sendRequest(url, header, data, urlParams, method) {
        let json = {
            'id': generateRandomId(6),
            'url' : url,
            'header': header,
            'data': data,
            'urlParams': urlParams,
            'method': method,
            'callbackFun': 'HttpSender.onHttpResponse'
        };
        let sender = new HttpSender();
        let promise = new Promise((resolve, reject) => {
            sender.resolve = resolve;
            sender.reject = reject;
        });
        HttpSender.senderBuffer.set(json['id'], sender);
        sender.sendRequest(json);

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

        return promise;
    }
}''';