Skip to content

shimaore/seem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

seem: Promises and Generators for async/await

seem is a tiny module that gives you the power of ES7's async/await using ES6's yield.

This is @ForbesLindesay's async function from his Control Flow Utopia presentation, with an extension to accept non-thenable.

var seem = require('seem');

var g = seem(function*(n){
  var a = yield Promise.resolve(n+4);
  var b = yield Promise.resolve(a+5);
  return b+3;
});

The function will now return a Promise that will resolve to the value of the return statement upon success.

g(2).then(function(result){ assert(result === 2+4+5+3); })

Essentially, inside a seem-ified generator function, yield turns its Promise argument into that Promise's result.

Replace Promise.resolve in the example with your preferred asynchronous operation for full power.

Accepts non-Promises

If the value you yield is not thenable, seem will turn it into a Promise.

var seem = require('seem');

var g = seem(function*(n){
  var a = yield n+4;
  var b = yield Promise.resolve(a+5);
  return b+3;
});

In other words you can freely mix-and-match Promises and non-Promises, and seem will do the right thing.

(Contrarily to co v4, seem will not attempt to resolve Promises in an array or an object given to yield. It will pass the array or object as-is.)

This module uses native Promises by default; seem.use(Promise) to provide your own (or use a polyfill before including the module).

About

Promises and Generators

Resources

License

Stars

Watchers

Forks

Packages

No packages published