2016-05-06 2 views
1

Я использую NodeJS для вставки данных в таблицу со многими отношениями, и я хочу включить два внешних ключа, когда я вставляю данные в таблицу, так выглядит мой код:NodeJS/MySQL возвращает результаты запроса к переменной

con.query("SELECT * FROM Transaction WHERE TransactionID > 1", function(err, res) { 
    if (err) { 
     throw (err); 
    } else if (res.length > 0) { 
     console.log("Transaction already exit"); 
    } else { 
     var transactionID; 
     var filePK; 
con.query("SELECT Filename FROM File WHERE Filename = ?", fileName, function(err, res) { 
     if (err) throw err; 
     filePK = JSON.stringify(res); 
}); 
con.query("SELECT TransactionDescriptionPK FROM TransactionDescription WHERE TransactionDescriptionPK > 0", function(err, res) { 
     if (err) throw err; 
     //console.log(res); 
     transactionID = res; 
}); 
var tran = { 
    TransactionID: data.ID, 
    TransactionDate: data.Description, 
    Amount: data.Amount 

}; 
con.query("INSERT INTO Transaction SET ?", tran, function(err, res) { 
    if (err) throw err; 
});  

Как я возвращаю результаты из этих запросов, чтобы добавить их в объект tran?

+0

спасибо за редактирование –

+0

Если я правильно понимаю вашу проблему правильно, вы хотите, чтобы вернуть результат запросов от вашей основной функции. Это невозможно, вам нужно будет использовать асинхронный обратный вызов или обещания, потому что запрос MySQL уже является асинхронным. Например, взгляните на [это] (https://www.codementor.io/nodejs/tutorial/manage-async-nodejs-callback-example-code). – CherryDT

ответ

0

Вы можете использовать async.parallel

async.parallel([ 
    function(callback) { 
    // you can directly pass the parallel callback to mysql query 
    // if you don't need to do anything else 
    return con.query(
     "SELECT * FROM Transaction WHERE TransactionID > 1", 
     callback 
    ); 
    }, 
    function(callback) { 
    // otherwise, just do you what you want (here JSON.stringify) 
    // then don't forget to return the parallel callback 
    return con.query(
     "SELECT Filename FROM File WHERE Filename = ?", 
     fileName, 
     function(err, res) { 
     if (err) 
      return callback(err); 
     const filePK = JSON.stringify(res); 
     return callback(null, filePK); 
     } 
    ); 
    }, 
    function(callback) { 
    return con.query(
     "SELECT TransactionDescriptionPK FROM TransactionDescription WHERE TransactionDescriptionPK > 0", 
     callback 
    ); 
    }, 
], function(err, data) { 
    // if any mysql queries above encounter an error, 
    // it calls the parallel final callback and stops other functions 

    // without errors, data looks like : 
    // data[0] equals mysql result object of the first query 
    // data[1] equals filePK const 
    // data[2] equals mysql result object of the last query 

    const tran = { 
    TransactionID: data[0][0].ID, 
    TransactionDate: data[0][0].Description, 
    // Amount: data.Amount // don't know where the amount come from, 
          // but you get the idea 
    }; 
    con.query(
    "INSERT INTO Transaction SET ?", 
    tran, 
    function(err, res) { 
     if (err) 
     throw err; 
     // ... 
    } 
); 
}); 
+0

он возвращает те же строки несколько раз –

+0

Мне нужно больше деталей, чтобы помочь ... Что возвращает те же строки? –

+0

Результаты запроса по запросу SELECT TransactionDescriptionPK FROM TransactionDescription WHERE TransactionDescriptionPK> 0 возвращает те же строки несколько раз –

Смежные вопросы