Obter uma árvore de pais + filhos com pg-promessa

Eu uso opg-promise biblioteca combluebird para fazer consultas dependentes. Eu tenho duas tabelas, aeb, parecidas com esta:

|   a   |     |   b   |  
|-------|     |-------|
| a_id  |     | b_id  |
| prop1 |     | prop2 |
              |  b_a  |

Ondeb.b_a é uma referência aa.a_id. Quero selecionar todas as entradas correspondentes a um determinadoprop1 e o resultado deve conter todas as correspondênciasa- linhas mais a correspondenteblinhas para cadaa. Isso deve ser possível com duas consultas dependentes. Ambas as consultas podem retornar vários resultados.

Se tabelaa retorna apenas uma linha, eu posso fazer isso:

function getResult(prop1) {
    return db.task(function (t) {
        return t.one("select * from a where prop1=$1", prop1)
            .then(function (a) {
                return t.batch([a, t.any("select * from b where b_a=$1", a.a_id)]);
            })
            .then(function (data) {
                var a = data[0];
                var bs = data[1];
                bs.forEach(function (b) {
                    b.a = a;
                });
                return bs;
            });
    });
}

E também sou capaz de obter todas as correspondênciasb-entries para múltiplosa-resultados como este:

function getResult(prop1) {
    return db.task(function (t) {
        return t.many("select * from a where prop1=$1", prop1)
            .then(function (as) {
                var queries = [];
                as.forEach(function (a) {
                    queries.push(t.any("select * from b where b_a=$1", a.id));
                });
                return t.batch(queries); // could concat queries with as here, but there wouldn't be a reference which b row belongs to which a row
            })
            .then(function (data) {
                // data[n] contains all matching b rows
            });
    });
}

Mas como reunir esses dois?

questionAnswers(1)

yourAnswerToTheQuestion