Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Сохраняются значения переменных (https://javascript.ru/forum/node-js-io-js/69604-sokhranyayutsya-znacheniya-peremennykh.html)

davisaliw 06.07.2017 16:14

окей я сам решил проблему, но если у кого то есть решение получше, прошу поделиться

мое решение - добавить функцию reset и вызывать ее в конце каждого запроса:

function reset(){
	cf = {
	doe_cnt: t4q.H5I,
	doact: t4q.N40,
	chknull: function (q) {
            return (null == q) ? -1 : q;
        },
        getFloatVal: function (Y) {
                if (cf.chknull(Y) != -1 && !isNaN(Y)) {
                    var b = parseFloat(Y);
                    if (!isNaN(b)) return b.toFixed(2);
                }
            return -1;
        },
        cdoa: function (Y) {
                if (Y) {
                    var v = cf.getFloatVal(Y.alpha),
                        h = cf.getFloatVal(Y.beta),
                        W = cf.getFloatVal(Y.gamma),
                        F = cf.doe_cnt + "," + v + "," + h + "," + W + ";";
                    cf.doact = cf.doact + F,
					cf.doe_cnt++;
					console.log(cf.doact);
                }
        }
	}
}

davisaliw 06.07.2017 20:39

А нет, не решил, такое решение не подходит
При большом количестве запросов просто не поспевает ресетнутся и некоторые скрипты выполняются с дубликацией

EmperioAf 06.07.2017 21:37

davisaliw,
function cfFactory() {
    var cf = {
        doe_cnt: t4q.H5I,
        doact: t4q.N40,
        chknull: function (q) {
            return (null == q) ? -1 : q;
        },
        getFloatVal: function (Y) {
            if (cf.chknull(Y) != -1 && !isNaN(Y)) {
                var b = parseFloat(Y);
                if (!isNaN(b)) return b.toFixed(2);
            }
            return -1;
        },
        cdoa: function (Y) {
            if (Y) {
                var v = cf.getFloatVal(Y.alpha),
                    h = cf.getFloatVal(Y.beta),
                    W = cf.getFloatVal(Y.gamma),
                    F = cf.doe_cnt + "," + v + "," + h + "," + W + ";";
                cf.doact = cf.doact + F,
                    cf.doe_cnt++;
                console.log(cf.doact);
            }
        }
    }
    return cf;
}


Просто не используйте в таких случаях глобальные переменные.
Делайте эту переменную в контексте функции, и передавайте её в другую функцию в качестве параметров. Т.е. в вашем случае должно быть так
function cfFactory() {
    var t4q = {
        'H5I': 0,
        'N40': "",
    };
    var cf = {
            doe_cnt: t4q.H5I,
            doact: t4q.N40,
            chknull: function (q) {
                return (null == q) ? -1 : q;
            },
            getFloatVal: function (Y) {
                if (cf.chknull(Y) != -1 && !isNaN(Y)) {
                    var b = parseFloat(Y);
                    if (!isNaN(b)) return b.toFixed(2);
                }
                return -1;
            },
            cdoa: function (Y) {
                if (Y) {
                    var v = cf.getFloatVal(Y.alpha),
                        h = cf.getFloatVal(Y.beta),
                        W = cf.getFloatVal(Y.gamma),
                        F = cf.doe_cnt + "," + v + "," + h + "," + W + ";";
                    cf.doact = cf.doact + F,
                        cf.doe_cnt++;
                    console.log(cf.doact);
                }
            }
        };
    return cf;
}

function test(testobj) {
    var cf = cfFactory();
    cf.cdoa(testobj);
};

module.exports.test = test;

Функция cfFactory всегда возвращает "новую" переменную cf, т.е. другой объект.
cfFactory() !== cfFactory() // true

davisaliw 06.07.2017 23:48

Оно самое! Спасибо, то что искал!


Часовой пояс GMT +3, время: 13:15.