0.0.1 • Published 6 years ago

nunjucks-await-filter v0.0.1

Weekly downloads
89
License
MIT
Repository
github
Last release
6 years ago

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.