Brings async/await
functions to your Nunjucks templates.
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!
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.