2017-06-22 3 views
1

Je souhaite effectuer plusieurs insertions MySQL dans une ordner spécifique pour mon application client-serveur.Node.js, plusieurs insertions MySQL

var con = createDatabaseConnection(); 

function createDatabaseConnection() { 
return (mysql.createConnection({ 
     host: // hostIp, 
     user: // user, 
     password: //pw, 
     database: //databasename 
    }); 
} 

function writeFoo(fooObject) { 
    var sql = // prepare sql insert for fooObject; 
    con.query(sql, function (err) { 
     // ? Is inserted data ready to use ? 
    } 
}); 

function writeBar(barObject) { 
    var sql = // prepare sql insert for barObject; 
    con.query(sql, function (err) { 
     // ? Is inserted data ready to use ? 
    }); 
}); 

// Both arrays containing an unpredictable amount of objects 
var fooArray = []; 
var barArray = []; 

Le point crucial est que je dois être absolument sûr, que les fooObject s du fooArray sont insérés avant la barArray est insérée. Parce que l'instruction SQL INSERT utilisée dans writeBar() contient une instruction SELECT qui doit trouver les données insérées dans writeFoo(). Et à tout moment un événement pourrait survenir (le client envoie des données qui doivent être insérées), qui aurait également besoin de cette fonctionnalité.

La situation réelle est un peu plus complexe, mais je pense que c'est le problème principal pour le moment.

+0

ici est bon lib https://caolan.github.io/async/ – Mirodil

Répondre

1

Vous pouvez les enchaîner dans une promise, de cette façon vous assurer que chaque appel est en ordre, ex:

var con; 
function createDatabaseConnection() { 
    return new Promise(function (resolve, reject) { 
     mysql.createConnection({ 
      host: hostIp, 
      user: user, 
      password: pw, 
      database: databasename 
     }, function(err, res){ 
      if(err) reject(err); 
      else resolve(res); 
     }); 
    }); 
} 

function writeFoo(fooObject) { 
    let sql = fooObject; 
    return new Promise(function (resolve, reject) { 
     con.query(sql, function (err, res) { 
      if(err) reject(err); 
      else resolve(res); 
     }); 
    }); 
} 

function writeBar(barObject) { 
    let sql = barObject; 
    return new Promise(function (resolve, reject) { 
     con.query(sql, function (err, res) { 
      if(err) reject(err); 
      else resolve(res); 
     }); 
    }); 
} 

createDatabaseConnection() 
    .catch(function (error) { 
     // connection failed 
     // log info 
     console.error(error); 
     process.exit(0); 
    }) 
    .then(function (res) { 
     con = res; 
     return writeFoo(fooObject); 
    }) 
    .catch(function (error) { 
     // writeFoo(fooObject) failed 
     // log info 
     console.error(error); 
     process.exit(0); 
    }) 
    .then(function() { 
     return writeBar(barObject); 
    }) 
    .catch(function (error) { 
     // writeBar(barObject) failed 
     // log info 
     console.error(error); 
     process.exit(0); 
    });