Example #1
0
File: index.js Project: floxjs/fork
test('should not drop puts', (t) => {
  t.plan(3)
  let dispatch = createDispatch()
  let {take, put} = channel()

  function * fnA () {
    while (true) {
      let res = yield take()
      yield fork(someAction(res))
    }
  }

  function * fnB () {
    yield put(1)
    yield put(2)
    yield put(3)
  }

  let count = 1
  function * someAction (res) {
    t.equal(res, count++)
  }

  dispatch(function * () {
    yield [fork(fnA), fork(fnB)]
  })
})
Example #2
0
 function push (val) {
   let {take: getRet, put: ret} = channel()
   return dispatch([val, ret])
     .then(function () {
       return getRet()
     })
     .then(function (task) {
       return task.done
     })
 }
Example #3
0
function driver (fn) {
  let {take: getDispatch, put: dispatch} = channel()
  fn && fn(push)
  return {
    push,
    drive: function * (listener) {
      listener = listener || identity
      return yield fork(drive(getDispatch, listener))
    }
  }

  function push (val) {
    let {take: getRet, put: ret} = channel()
    return dispatch([val, ret])
      .then(function () {
        return getRet()
      })
      .then(function (task) {
        return task.done
      })
  }
}