2017-06-22 56 views
1

我想在我的服务器客户端应用程序的specefic ordner中执行多个MySQL插入操作。Node.js,多个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 = []; 

至关重要的一点是,我是绝对肯定的是,该barArray被插入前fooObject S IN的fooArray插入。由于在writeBar()中使用的SQL INSERT语句包含一条SELECT语句,该语句必须找到插入writeFoo()中的数据。 在任何时候都可能发生事件(客户端发送需要插入的数据),那也需要这个功能。

真实情况有点复杂,但我认为这是目前的主要问题。

+0

这边独好LIB https://caolan.github.io/async/ – Mirodil

回答

1

您可以在promise连锁它们,这样您将确保每个呼叫是为了,例如:

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