Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
pentium166
Oct 15, 2012
Fully unwrapping the initial code sample, you end up with something like this:

TypeScript code:
function myMetricsHandler(metrics) {
  // metrics is provided by the function that calls myMetricsHandler,
  // in this case "metricScope"
  return async function butts(input) {
    return metrics.someChainedFuncsThatPublishAMetric(input.exampleKey);
  }
}

const myPublish = metricScope(myMetricsHandler);
await myPublish({exampleKey: 5})


// Where in the AWS library, metricScope might be defined as something like:
function metricScope(userFunction) {
  const metrics = new MetricsService();
  return async function (args) {
    // first, get the async function returned by myMetricsHandler
    const buttsFunction = userFunction(metrics);
    // then call that async function with the final arguments ({exampleKey: 5}).
    // butts will have access to metrics by virtue of being defined inside
    // the closure created by myMetricsHandler
    return buttsFunction(args);
  }
}

Adbot
ADBOT LOVES YOU

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply