2017-06-22 86 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); 
    });