2017-12-06 9 views
0

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 
     }); 
    }); 
    } 
}); 
+0

달성하고자하는 것은 무엇입니까? * 왜 * 당신이이 일을하는지, 그리고 현재 코드에 어떤 문제가 있는지를 설명하십시오. –

+0

목적은 대용량 데이터베이스에서 가격 데이터를 덮어 쓰는 작은 데이터베이스로 데이터를 이동하는 것입니다. 이렇게하면 서버가 모든 필터링을 수행하는 동안 사용자에 대해 더 빠른 쿼리를 수행 할 수 있습니다. 오류가 발생하지 않는 행과 코드가 잘못 된 행은 주석 처리했지만 sqlInsert 쿼리는 호출되지 않습니다. – Nick

+0

@Nick'db.queryPromise' 함수 안에'console.log (err)'을 사용하여 쿼리로 인해 에러가 없는지 확인하십시오. –

답변

0

sqlInsert에 대한 SQL 구문이 유효하지 않습니다. 다음 예제와 같이 작성해야합니다. 표현식의 값을 "Template String"에 추가하려면 ${expression} 리터럴을 사용해야합니다. promise은 거부하는 오류가 있으므로 해결되지 않습니다.

const sqlInsert = `INSERT into price_cache (high) VALUES (${highPrice})`; 
+0

죄송합니다. 질문에 오타가있었습니다. 슬프게도 제대로 제공된 표현식을 사용해도 오류가 발생하지 않으며 단순히 호출되지 않습니다. 문법은 모두 OK이고, – Nick

+0

에'db.queryPromise' 메소드의 소스 코드를 추가 할 수 있습니까? – Siggy