让我们说你宣传一个MySQL连接对象(为了进行原始的MySQL查询):
var con = Promise.promisify(MySQL.newCon());
然后,您使用一些ORM方法启动一个promise链。在第一个then
内部,您从color
模型返回一个Color
对象,但是,您想要启动一个MySQL事务并将该颜色传递给下一个{{1}在promise链中(但也确保事务开始):
then
我认为返回Color
.findOne() // ORM looks for a color within the model (table)
.then(function (color) {
// A transaction is started
// Whatever this query returns is useless,
// Since it starts a transaction.
// I'd like to actually pass the color to the next `then`.
return con.query('START TRANSACTION');
})
.then(function (color) {
console.log(color);
});
确保事务已启动(并且承诺链继续),但这是唯一的方法吗?我知道我能做到:
con.query
或者也可以返回数组并使用return new Promise(function (resolve, reject) {
con.query('START TRANSACTION', function (err) {
if (err) {
return reject(new Error(err));
}
resolve(color); // Pass the color to the next then
});
});
代替spread
:
then
这些是这样做的唯一方法吗?理想情况下,我喜欢与我发布的第一个示例非常相似的内容,因为我认为返回return [color, con.query('START TRANSACTION')];
看起来很脏,返回一个阵列有点令人困惑,因为我根本不关心new Promise
返回的内容。
感谢。