pull-resolve

1.2.0 • Public • Published

pull-resolve

Library to wrap pull-stream sinks and await the result.

Usage

A basic resolver just wraps pull.onEnd. This lets you wait until a pull-stream has finished, and move on or catch errors accordingly.

var pull = require('pull-stream')
var resolve = require('pull-resolve')
 
async function demo () {
  var stream = pull(
    pull.values([5, 4, 3, 2, 1]),
    pull.asyncMap(someMagic)
  )
 
  try {
    await resolve(stream)
    // Move on
  } catch (err) {
    // Handle errors
  }
}

Builtin sinks

In addition to pull.onEnd, this library ships with a couple of plugins to support other builtin pull-stream sinks as well.

collect()

This plugin is used without arguments.

var collect = require('pull-resolve/collect')
var pull = require('pull-stream')
var resolve = require('pull-resolve')
 
async function demo () {
  var stream = pull.values([1, 2, 3])
  var result = await resolve(stream, collect())
 
  console.log(result) // [1, 2, 3]
}

concat()

This plugin is used without arguments.

var concat = require('pull-resolve/concat')
var pull = require('pull-stream')
var resolve = require('pull-resolve')
 
async function demo () {
  var stream = pull.values(['some', 'stuff'])
  var result = await resolve(stream, concat())
 
  console.log(result) // 'somestuff'
}

find(test?: function)

This plugin takes a test function as argument, just like Array.prototype.find.

var find = require('pull-resolve/find')
var pull = require('pull-stream')
var resolve = require('pull-resolve')
 
async function demo () {
  var stream = pull.values(['some', 'mysterious', 'stuff'])
  var result = await resolve(stream, find(word => word.includes('myst')))
 
  console.log(result) // 'mysterious'
}

reduce(reducer: function, accumulator?: any)

This plugin takes a reducer function and an optional accumulator value as arguments, just like Array.prototype.reduce.

var pull = require('pull-stream')
var reduce = require('pull-resolve/reduce')
var resolve = require('pull-resolve')
 
async function demo () {
  var stream = pull.values([1, 1, 2, 3, 5, 8])
  var resolve = await resolve(stream, reduce(function (acc, val) {
    return acc + val
  }, 0))
 
  console.log(result) // 20
}

Advanced sinks

You can wrap any pull-stream sink and plug it into a resolver. This example using pull-level demonstrates the correct pattern:

var level = require('pull-level')
var pull = require('pull-stream')
var resolve = require('pull-resolve')
 
function write (db, opts) {
  return function (resolve, reject) {
    return level.write(db, opts, function (err) {
      if (err) reject(err)
      else resolve()
    })
  }
}
 
async function demo () {
  var stream = pull.values(someData)
  
  try {
    await resolve(stream, write(db))
    // move on
  } catch (err) {
    // handle errors
  }
}

Compatibility

If async/await isn't supported in your environment, you can use the promise directly:

resolve(stream).then(moveOn).catch(handleError)

License

Apache-2.0

Package Sidebar

Install

npm i pull-resolve

Weekly Downloads

2

Version

1.2.0

License

Apache-2.0

Unpacked Size

19 kB

Total Files

10

Last publish

Collaborators

  • savelbr