NodeJS类始终返回相同的值

时间:2014-07-30 03:30:19

标签: node.js

在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中创建两个唯一对象吗?

1 个答案:

答案 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>