DBにクエリを実行してデータを挿入している間に、配列periods
をループするのに苦労しています。私が直面している問題は最後の行から5番目に見ることができます。最後のdb.queryPromise
は呼び出されません。ループ内でのコミットメント
問題がどこにあるかを下から5行コメントを参照してください。
// db.js
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : ****,
password : ****,
database : ****,
});
module.exports = connection;
module.exports.queryPromise = function (args) {
return new Promise((resolve, reject) => {
connection.query(args, (err, rows, fields) => {
if (err) return reject(err);
resolve(rows);
});
});
};
module.exports.connectPromise = new Promise((resolve, reject) => {
connection.connect(err => {
if (err) reject(err);
resolve();
});
});
// app.js
const db = require('../config/db');
const periods = ['1h','12h','24h','1w','1m','3m','1y','all'];
const sqlCarIds = `SELECT id FROM car_models ORDER BY id DESC LIMIT 200;`;
return db.queryPromise(sqlCarIds)
.then((rows) => {
const car_ids = [];
for (let i = rows.length - 1; i >= 0; i--) {
car_ids.push(rows[i].car_id);
};
for (let i = periods.length - 1; i >= 0; i--) {
const sqlSnapshot = `SELECT price FROM car_models;`;
db.queryPromise(sqlSnapshot)
.then(([row]) => {
if (!row) {
throw new Error('API call found nothin');
}
const highPrice = row.high;
const sqlInsert = `INSERT into price_cache (high) VALUES (` + highPrice` +)`;`
console.log(sqlInsert); // logs correctly formed query
db.queryPromise(sqlInsert)
.then(() => {
console.log('this should fire'); // doesn't fire
});
});
}
});
達成したいことはありますか? *なぜ*あなたがこれをやっているのか、あなたの現在のコードに間違っているのかを説明してください。 –
目的は、大規模なデータベースから価格データを上書きする小さなデータベースにデータを移動することです。これにより、サーバーがすべてのフィルタリングを実行している間に、ユーザーのクエリを高速化できます。私は発火しない行とコードが間違っている行をコメントしました。エラーはありませんが、sqlInsertクエリは単に呼び出されません。 – Nick
@ニック 'db.queryPromise'関数の中で' console.log(err) 'を使って、クエリのためにエラーがないことを確認してください。 –