nunjucks-await-filter
v0.0.1
Published
A filter to allow async/await functions in Nunjucks templates
Downloads
14
Maintainers
Readme
Usage
Add the filter to your Nunjucks environment, and prepare an async
function:
const awaitFilter = require('nunjucks-await-filter')
const environment = nunjucks.configure()
awaitFilter(environment)
async function getWeather (city) {
// This can be any async operation, like fetching data
// from an external API, or getting records from a database.
return request('weather.com', { city })
}
Use an async
function in your Nunjucks template:
The weather in Toronto is {{ getWeather('Toronto') | await }}
And then render the template however you normally would (as an Express view engine, using env.renderString
, etc). getWeather
will resolve and the result will show in the rendered template. That's all there is to it!
How it works
It's actually very small, here's almost all of the code:
async function awaitFilter (functionPromise, callback) {
try {
// The called function returns a Promise, which we
// now `await` until its done
const result = await functionPromise
// Then we call the Nunjucks async filter callback
callback(null, result)
} catch (error) {
// And if the `functionPromise` throws an error
// Nunjucks will pick it up here
callback(error)
}
}
Using Nunjucks Async Filters, this brings the await
keyword to Nunjucks templates.