Estoy usando KnexJS para crear consultas. Sin embargo, estoy confundido sobre lo que realmente finaliza la consulta.
Tomemos, por ejemplo, esta consulta:
knex('someTable').join('someOtherTable', 'someTable.fid', '=', 'someOtherTable.pid').select('someField');La otra forma de escribir la consulta:
knex.select('someField').from('someTable').join('someOtherTable', 'someTable.fid', '=', 'someOtherTable.pid') No entiendo completamente cuándo querrías hacer el Método 1 sobre el 2, y viceversa. Pero lo que realmente me confunde es cómo knex "sabe" cuándo se termina de construir la consulta y cuándo se ejecuta realmente. ¿Alguien puede arrojar algo de luz sobre esto? Tendría sentido si hubiera algún tipo de método .build() al final. Pero sin eso, estoy confundido.
La consulta Knex se activa cuando se llama al método .then() . Debido a que la palabra clave async/await await llama internamente al método .then() de Promise usando la palabra clave await con un objeto knex también lo finalizará. Tenga en cuenta que Promise.all() también intentará llamar al método .then() de las promesas que se le pasan, por lo que Promise.all() también finalizará una consulta knex.
Entonces, básicamente, las consultas knex se finalizan y se transmiten a la base de datos cuando:
lo llamas método .then()
usas la palabra clave await en él
lo pasas a Promise.all()
Pero tenga en cuenta que (2) y (3) son en realidad solo versiones diferentes de (1),