首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js,多个MySQL插入

问Node.js,多个MySQL插入
EN

Stack Overflow用户
提问于 2017-06-22 15:46:25
回答 2查看 97关注 0票数 1

我想为我的服务器-客户端应用程序在一个特定的命令器中执行多个MySQL插入。

代码语言:javascript
复制
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 = [];

关键的一点是,我必须绝对肯定,在插入fooObject之前,fooArray中的barArray是插入的。因为writeBar()中使用的SELECT语句包含一个SELECT语句,该语句必须找到插入到writeFoo()中的数据。在任何时候,事件都可能发生(客户端发送需要插入的数据),这也需要这种功能。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-22 17:14:58

您可以将它们链接到一个承诺中,这样您就可以确保每个调用都是正常的,例如:

代码语言:javascript
复制
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);
    });
票数 1
EN

Stack Overflow用户

发布于 2017-06-22 17:03:05

并不是说ORM总是最好的,但是http://docs.sequelizejs.com/在节点上工作得很好。这里有一个大容量插入选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44704079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档