我如何处理带有承诺而不是回调的嵌套查询?

How can i handle nested queries with promises instead of callback?

我如何使用 bluebird promises 执行以下操作。我使用的模块是 bluebirdpromise-mysql

  1. 插入 table A 和 return a_id
  2. 使用 a_id 作为外键
  3. 在 table B 中插入记录
  4. 使用 a_id 作为外键
  5. 在 table C 中插入记录
  6. 现在向用户发送所有记录已添加的响应。

我正在使用本机查询。

我刚刚查看 promise-mysql 库 return promises 中的函数。你知道那是什么意思吗?你可以用 .then().

链接每一个

这是一个例子:

var mysql = require('promise-mysql');
var connection;

mysql.createConnection({
    host: 'localhost',
    user: 'sauron',
    password: 'theonetruering',
    database: 'mordor'
}).then(function(conn){
    connection = conn;
});

并在您的网络服务中:

return connection.query('insert into a values(. . . . .)')
    .then(function(rows){
        var a_id = rows.insertId;
        return connection.query('insert into b values(. . . . .)')
            .then(function(rows){
                return connection.query('insert into c values(. . . . .)');
            });
    });

您实际上可以在第一个 .then(function(rows){}) 的末尾链接,但我只是想确保 a_id 不会存在于您插入表 b 和 c 的位置之外。

大意是:

insetA()
  .then(function(a_id){
    return Promise.all([inserB(a_id), inserC(a_id)])
  })
  .then(function(){
     res.send("all good")
  })
  .catch(function(error){
     res.send("some error")
  })


function insetA(){
  return new Promise(function (resolve, reject) {
    // inserting A 
    // resolve(a_id)
  })
}