「A」と「B」の2つのテーブルがあります。テーブル「A」の主キーを含むテーブル「B」に行を作成したいのですが、この操作全体はアトミックでなければなりません。
function test(data, res) {
let query1 = knex.insert([data], "id").into("A").toString();
let query2 = "";
db.tx(function (t) {
return this.batch([
t.one(query1).then(function (id) {
query2 = knex.insert({A_id:id, x:x, y:y}).into("B").toString();
t.none(query2).catch(function (error) {
console.log(error); // want to pass this error to next catch block
});
})
]);
}).then(function () {
console.log("success");
}).catch(function (error) {
console.log(error);
});
}
ここで、ネストされたプロミスでエラーが発生するたびに、親のプロミスを拒否し、そのエラーを親のプロミスに渡します。