在代码的开头,我创建了全局变量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行,就像之前的方法并没有影响他。
对不起,这听起来可能很愚蠢,但我无法弄清楚;
答案 0 :(得分:0)
Node.js不会将用 var 声明的变量放入全局范围。 (see related Question)。
尽管您可以通过在不使用dt
关键字的情况下为var
分配值来创建全局变量,但它在严格模式下会出错。您可以尝试将值分配给global.dt
而不是dt
来创建和访问全局值,而不会出现严格的模式错误。
每Node.js documentation次需要一个模块,总是返回与第一次需要该文件时创建的相同的module.exports
缓存对象。因此,您还应该能够在要访问应用程序内公共名称空间对象的任何地方要求一个空的js文件,例如appdata.js
。