У меня есть этот код:
var sql1 = "SELECT DISTINCT sensor_id, timestamp FROM Displacement_Record WHERE wave_type = 1 ORDER BY timestamp ASC";
var sql2 = "SELECT timestamp FROM Displacement_Record WHERE wave_type = 0 AND sensor_id = ?";
var sql3 = "SELECT latitude, longitude FROM Sensor_Record WHERE sensor_id = ?";
var pTime, sTime;
db.getConnection((err, conn) => {
if (err) throw err;
conn.query(sql1, function (err, res, fields) {
if (err) throw err;
for (i = 0; i < res.length; i++) {
var sensor = res[i].sensor_id;
console.info(sensor);
var pTime = res[i].timestamp;
sql2 = mysql.format(sql2, sensor);
conn.query(sql2, function (err, results, fields) {
if (err) throw err;
var sTime = res[i].timestamp; //timestamp error
console.info("results = " + results + " " + results.length);
conn.query(sql3, function (err, res, fields) {
if (err) throw err;
var location = [res[i].latitude, res[i].longitude];
console.info("Data = " + sensor + " " + pTime + " " + sTime + " " + latitude + " " + longitude);
});
});
}
});
conn.release();
});
Первый запрос дает мне результаты правильно. Я могу получить и сохранить данные, которые мне нужны. Однако второй и третий запросы приводят к следующему результату:
results = [object Object],[object Object],[object Object]
и бросает:
throw err; // Rethrow non-MySQL errors
^
TypeError: Cannot read property 'timestamp' of undefined
Я попытался увидеть, что вызывает это. Я могу получить правильный результат только тогда, когда удаляю условие в запросе. Тем не менее, мне нужно условие, конечно. И мне также интересно, почему он выдает ошибку в следующих запросах, когда я могу получить результаты по первому запросу с условиями и всем остальным.
Я надеюсь, что кто-то может мне помочь, спасибо!
Нет никаких причин, по которым скрипт падает на var pTime = res[i].timestamp;, если он может читать var sensor = res[i].sensor_id;, попробуйте переписать строку, перед ` res[i]` мог появиться непредвиденный символ, например, неправильный пробел
Я отредактировал рассматриваемый код. На самом деле во втором запросе был var sTime = res[i].timestamp;.






Проблема на самом деле не проблема. когда у вас есть [object Object] в любом console.info, это означает, что то, что вы хотите напечатать в строке, невозможно напечатать так как в строке.
Если вы действительно хотите распечатать результат, что вы должны делать вместо
conn.query(sql2, function (err, results, fields) {
if (err) throw err;
console.info("results = " + results + " " + results.length); // HERE
conn.query(sql3, function (err, res, fields) {
if (err) throw err;
var location = [res[i].latitude, res[i].longitude];
console.info("Data = " + sensor + " " + pTime + " " + sTime + " " + latitude + " " + longitude); // HERE
});
});
На самом деле :
conn.query(sql2, function (err, results, fields) {
if (err) throw err;
console.info("results = "); // HERE
console.info({ results }, results.length); // HERE
conn.query(sql3, function (err, res, fields) {
if (err) throw err;
var location = [res[i].latitude, res[i].longitude];
console.info("Data = "); // HERE
console.info({ sensor, pTime, sTime, latitude, longitude }); // HERE
});
});
Смотрите обозначения console.info({ variable });
Это позволяет вам регистрировать ваше переменное содержимое с ключом, отображаемым слева, как вы действительно хотели бы сделать в своих текущих console.infos.
Пример :
const results = [1, 2, 3, 4];
const randomString = 'Some content in here';
console.info({ results, randomString});
См. мой комментарий к вашему сообщению об исключении @nelaaam
О, я был в состоянии видеть, что я получаю результаты. Но как мне сохранить его в переменной? Он по-прежнему выдает TypeError: Невозможно прочитать свойство «широта» неопределенного. Является ли мой способ получения данных (res[i].latitude) неверным?
Посмотрите параметры функции. Ваша ссылка res больше не та, которую вы выполняете, а переменная, которую вы имеете в обратном вызове функции. (в conn.query(sql3, function (err, res, fields) {)
Я уже пытался изменить имя переменной, но все равно выдает ошибку.
Тогда это, вероятно, проблема масштаба. Попробуйте сохранить свой первый параметр обратного вызова в переменной перед вводом другого обратного вызова.
Это была переменная i. Спасибо!
Не забудьте подтвердить ответ на свой пост
Вы не можете одновременно использовать комбинацию строки и объекта.
Попробуйте формат ниже, это может вам помочь.
console.info('results =');
console.info(results);
console.info(results.length);
По крайней мере, одной недостающей вещи является замена параметров sql3:
sql3 = mysql.format(sql3, sensor);