Home > Enterprise >  Getting returned value from another javascript file using async
Getting returned value from another javascript file using async

Time:10-25

class monitor {
    constructor(){
        this.delay = config.delay

    delay(time) {
        return new Promise(function (resolve) {
            setTimeout(resolve, time);
        });
    }
        async redacted (pid) {
            if (this.err === true) {
                await this.delay(this.delay)
            }
            console.log("MONITOR > Getting Item Attrs")
            const options = {
                method: 'get', 
                url: url   pid   '.json', 
                headers: {
                    accept: '*/*',
                    'accept-encoding': 'gzip, deflate, br',
                },
                proxy: this.proxy
            }

            return req(options)
            .then((res) => {
                //console.log(res)
                let variants = res.data.skus
                //console.log(variants)
                const att = []
                for (let [key, value] of Object.entries(variants)) {
                    if(value.inStock) att.push(key)
                }
                if(att.length >= 1){
                    console("MONITOR > Sourced Item")
                    return att;
                } else {
                    ("MONITOR > No Variants Available")
                    this.oos = true
                    this.redacted(config.pid);
                }
            })
            .catch((err) => {
                if (err?.response?.status == 403) {
                    console.error("MONITOR > Proxy Block @ GET PRODUCT")
                    this.err = true
                    this.redacted(config.pid);
                }
            })
            
        }
}
var hello = new monitor().redacted(config.pid);
console.log(hello)

From what I understand I need to wait for the promise to finish before returning but I am confused on how to execute this with my code and also call this file and store the return value in another file. I'm not sure if my formatting is wrong as well, but I tried changing and no fix anyways

CodePudding user response:

This snippet isn't using asynch but, it gives you the idea. You need to await or .then the promise (the fetch/request). You first fetch the remote JSON file then you parse it / read it. Something like:

    function getJSON(url) {
        return new Promise(function (resolve, reject) {
            var xhr = new XMLHttpRequest();
            xhr.open('get', url, true);
            //xhr.responseType = 'json';
            xhr.onload = function () {
                var status = xhr.status;
                if (status == 200) {
                    resolve(JSON.parse(xhr.response)); // <---------------
                } else {
                    reject(status);
                }
            };
            xhr.send();
        });
    };

    getJSON(primaryURL).then(function (res) {
        if (res) {
            //do something
        } else {
            console.log("response not found");
        }
    }).catch(function (error) {
        console.log("Error getting document:", error);
    });
  • Related