在NodeJS中,我尝试创建同一个类的2个对象。然而,尽管具有不同的值,但这两个对象总是相同的。这是班级。
function reading(){
var readingArr = [];
};
reading.prototype.dbValue = function(counter, limit, type, mIndex) {
db.data.find({ 'type': type }).limit(limit).sort({timestamp:-1}).skip(counter, function(err, docs){
readingArr = [];
if( docs != 'undefined' ){
for(var i=0; i<limit; i++){
readingArr.push(docs[i].measurement[mIndex].value.toFixed(2)); //2 Decimal Placet;
}
}
});
if(typeof readingArr == 'undefined'){
readingArr = [];
}
return readingArr;
};
这是对象创建。
var spo2 = new reading();
var spo2Arr = spo2.dbValue(0, 5, 'Oximeter', 1);
var temp1 = new reading();
var temp1Arr = temp1.dbValue(0, 5, 'Temperature', 0);
尽管在数据库中具有不同的值,但spo2Arr和temp1Arr都返回相同的值。实施例
spo2Arr:98.00
temp1Arr:98.00
spo2Arr:37.91
temp1Arr 37.91
我可以知道如何在NodeJS中创建两个唯一对象吗?
答案 0 :(得分:0)
您正在执行一个异步函数调用,该调用在dbValue()
执行完一段时间后才会完成。
试试这个:
reading.prototype.dbValue = function(counter, limit, type, mIndex, cb) {
db.data.find({ 'type': type }).limit(limit).sort({timestamp:-1}).skip(counter, function(err, docs){
if (err)
return cb(err);
var readingArr = [];
if (docs !== undefined) {
for (var i = 0; i < limit; i++)
readingArr.push(docs[i].measurement[mIndex].value.toFixed(2));
}
cb(null, readingArr);
});
};
然后你可以使用它:
var spo2 = new reading();
spo2.dbValue(0, 5, 'Oximeter', 1, function(err, spo2Arr) {
// check for `err`, if it's falsey, use `spo2Arr`
});
var temp1 = new reading();
temp1.dbValue(0, 5, 'Temperature', 0, function(err, temp1Arr) {
// check for `err`, if it's falsey, use `temp1Arr`
});
如果温度读数取决于血氧计读数,则您必须在血氧计读数回调内模拟温度读数代码,或者您可以使用async之类的模块来帮助构建控制流。< / p>