Как создать новый экземпляр глобальной переменной в Javascript - PullRequest
0 голосов
/ 11 сентября 2018

в начале моего кода я создаю новый экземпляр моей глобальной переменной DT, но когда я пытаюсь переназначить его новому объекту в методе, моя глобальная переменная не изменяется.

const functions = require('firebase-functions');
const DecisionTree = require("decision-tree")
var firebase = require('firebase-admin');
const cors = require('cors')({origin: true});


......

var boards;
var dt;
var training_dat;

var class_name = "NextMove";
var features = ["C1", "C2", "C3", "C4", "C5", "C6", "C7", "C7", "C9"];

ref.once('value').then(function(snap) {
    boards = snap.val(); // query all data
    training_data = new Array();
    for(var B in boards){
        training_data.push(boards[B]);
    }
    dt = new DecisionTree(training_data, class_name, features);
    // HERE dt is a model with 500 rows.
});



exports.train = functions.https.onRequest((request, response) => {
.....

    dt=new DecisionTree(new_training_data, class_name, features);
//HERE dt is a model with 1000 rows
    response.send({output: "Training"});
});

exports.DOSOMETHING = functions.https.onRequest((request, response) => {
    // if i call dt here it is still a model with 500 rows.
    response.send({output: "Done"});
});

Итак, я запускаю свой скрипт, получаю, что dt составляет 500 строк. Если я называю «поезд», я получаю, что это 1000 строк. Но когда я вызываю «DOSOMETHING», моя переменная dt по-прежнему имеет 500 строк, как будто метод прецедента на него не влиял.

Извините, это может звучать глупо, но я не могу понять;

1 Ответ

0 голосов
/ 11 сентября 2018

Node.js не помещает переменные, объявленные с var в глобальную область видимости.( см. Связанный вопрос ).

Хотя вы можете создать глобальную переменную, присвоив значение dt без использования ключевого слова var, в строгом режиме происходит ошибка.Вы можете попробовать присвоить значение global.dt вместо dt, чтобы создать и получить доступ к глобальному значению без строгих ошибок режима.

За Документация Node.js , требующая, чтобы модуль несколько раз всегда возвращал один и тот же кешированный module.exports объект, который был создан, когда файл был впервые необходим.Следовательно, вы также должны иметь возможность требовать пустой файл js, скажем appdata.js, везде, где вы хотите получить доступ к общему объекту пространства имен в приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...