我如何处理带有承诺而不是回调的嵌套查询?
How can i handle nested queries with promises instead of callback?
我如何使用 bluebird promises 执行以下操作。我使用的模块是 bluebird
、promise-mysql
- 插入 table A 和 return a_id
- 使用 a_id 作为外键
在 table B 中插入记录
- 使用 a_id 作为外键
在 table C 中插入记录
- 现在向用户发送所有记录已添加的响应。
我正在使用本机查询。
我刚刚查看 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)
})
}
我如何使用 bluebird promises 执行以下操作。我使用的模块是 bluebird
、promise-mysql
- 插入 table A 和 return a_id
- 使用 a_id 作为外键 在 table B 中插入记录
- 使用 a_id 作为外键 在 table C 中插入记录
- 现在向用户发送所有记录已添加的响应。
我正在使用本机查询。
我刚刚查看 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)
})
}