Javascript philosophy and execution flow is quite different to Perl:
- With Perl it's strongly discouraged to wrap an operation in a `try { ... }` block without a `catch { ... }` block following it, because any errors would be hidden and the operation might silently fail.
- With Javascript and Promises, many operations are automatically wrapped in a `try { ... }` block, and are not even executed if they don't have a `.then()` or a `.catch()` added, so they silently fail!
Knex basics
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
knex.select() | |
.from('some_table') | |
.where({ | |
name: 'Mr Foo' | |
}) | |
.then((result) => { | |
// This block is *REQUIRED* or the query is not sent to the database! | |
if (! result[0]) { | |
console.log(`Error: "Mr Foo" was not found.`); | |
process.exit(1); // It is alright to exit here *IF* it's a fatal condition | |
} | |
// Mr Foo was found | |
doSomethingWithMrFoo({ nameId: result[0].id }); | |
}) | |
.then(() => { | |
// Query completed, Mr Foo may or may not have been found. | |
console.log('Query done.'); | |
doNextThing(); | |
//process.exit(0); // Warning: Do not call exit here or the knex promises don't get fulfilled. | |
}); | |
function doNextThing { | |
knex('track').insert({ | |
name: track.name, | |
artist: track.artist, | |
}) | |
.then(function(resp) { | |
console.log('loaded track', resp); | |
}).catch(function(err) { | |
console.log('ERROR:', err); | |
process.exit(1); // It is alright to exit here because there is a fatal error (the database failed to run the query) | |
}); | |
} | |
console.log('Everything done.'); | |
//process.exit(0); // Do not exit here either, or knex operations will not finish. |