Node.js nodejs mongodb查询导致行为不一致,可能与异步/承诺相关
我对mongo find()有问题。该查询由串行读取(连接的rfid读卡器)触发。为了从本质上解释这个问题,我创建了两个查询:一个是RFID查询,另一个是固定名称查询。如您所见,第一次扫描rfid时,两个查询都会给出一个结果,但第二次只有固定查询会给出一个结果。这似乎与承诺有关……关于为什么会发生这种不同的行为有什么想法吗Node.js nodejs mongodb查询导致行为不一致,可能与异步/承诺相关,node.js,mongodb,async-await,mongodb-query,Node.js,Mongodb,Async Await,Mongodb Query,我对mongo find()有问题。该查询由串行读取(连接的rfid读卡器)触发。为了从本质上解释这个问题,我创建了两个查询:一个是RFID查询,另一个是固定名称查询。如您所见,第一次扫描rfid时,两个查询都会给出一个结果,但第二次只有固定查询会给出一个结果。这似乎与承诺有关……关于为什么会发生这种不同的行为有什么想法吗 // server.js db = require(./db.js); parser.on('data', function (line) { RFID_TAGID = li
// server.js
db = require(./db.js);
parser.on('data', function (line) {
RFID_TAGID = line.substr(1, 13);
console.log("=============================================================");
console.log(" S parser data on serial " + COMPORT);
console.log("=============================================================");
console.log("==> parse on data RFID_TAGID:" + RFID_TAGID);
db.findPlayerByRfid(RFID_TAGID)
.then(function (player) {
console.log("player: " + player[0].name); // undefined
})
.catch((e) => {
console.log("parser" + parser + "catch" + e);
});
db.findPlayerByName("joep")
.then(function (player) {
console.log("player: " + player[0].name);
})
.catch((e) => {
console.log("parser" + parser + "catch" + e);
});
}
// db.js
exports.findPlayerByName = function (name,res) {
console.log("db findPlayerByRfid monconnected:" + monconnected + " rfidstr:" + name);
console.log("db connection mongoose: "+mongoose.connection.readyState);
try {
const player = Player.find({ name: name });
return player;
}
catch (e) { console.log("res:"+res); }
}
exports.findPlayerByRfid = function (rfidIn,res) {
console.log("db findPlayerByRfid monconnected:" + monconnected + " rfidstr:" + rfidIn);
console.log("db connection mongoose: "+mongoose.connection.readyState);
try {
const player = Player.find({ rfid: rfidIn });
return player;
}
catch (e) { console.log("res:"+res); }
}
result after first scan of rfid:
=============================================================
S parser data on serial COM3
=============================================================
==> parse on data RFID_TAGID:38003476A2D8
db findPlayerByRfid monconnected:true rfidstr:38003476A2D8
db connection mongoose: 1
db findPlayerByRfid monconnected:true rfidstr:joep
db connection mongoose: 1
player: joep
player: joep
result after second scan
=============================================================
S parser data on serial COM3
=============================================================
==> parse on data RFID_TAGID:38003476A2D8
db findPlayerByRfid monconnected:true rfidstr:38003476A2D8
db connection mongoose: 1
db findPlayerByRfid monconnected:true rfidstr:joep
db connection mongoose: 1
parser[object Object]catchTypeError: Cannot read property 'name' of undefined
player: joep