Skip to content

Brings async/await functions to your Nunjucks templates.

License

Notifications You must be signed in to change notification settings

JasonEtco/nunjucks-await-filter

Repository files navigation

Nunjucks await Filter

Brings async/await functions to your Nunjucks templates.

NPM Build Status Codecov

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.

About

Brings async/await functions to your Nunjucks templates.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published