Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Write simple and readable synchronous code in nodejs using fibers

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 benchmarks
Octocat-spinner-32 examples
Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 README.md
Octocat-spinner-32 package.json
README.md

Introduction

node-sync is a simple library that allows you to call any asynchronous function in synchronous way. The main benefit is that it uses javascript-native design - Function.prototype.sync function, instead of heavy APIs which you'll need to learn. Also, asynchronous function which was called synchronously through node-sync doesn't blocks the whole process - it blocks only current thread!

It built on node-fibers library as a multithreading solution.

You may also like fibers-promise and node-fiberize libraries.

Examples

Simply call asynchronous function synchronously: function asyncFunction(a, b, callback) { process.nextTick(function(){ callback(null, a + b); }) }

// Function.prototype.sync() interface is same as Function.prototype.call() - first argument is 'this' context
var result = asyncFunction.sync(null, 2, 3);
console.log(result); // 5

// Read file synchronously without blocking whole process? no problem
var source = require('fs').readFile.sync(null, __filename);
console.log(String(source)); // prints the source of this example itself

It throws exceptions! function asyncFunction(a, b, callback) { process.nextTick(function(){ callback('something went wrong'); }) }

try {
    var result = asyncFunction.sync(null, 2, 3);
}
catch (e) {
    console.error(e); // something went wrong
}

Parallel execution: var Parallel = require('sync').Parallel;

// Parallel function will return values only when all callbacks will be executed
var result = Parallel(function(callback){
    asyncFunction(2, 3, callback());
    asyncFunction(5, 5, callback());
    asyncFunction(10, 10, callback());
});
console.log(result); // [5, 10, 20]

// Associative result
var result = Parallel(function(callback){
    asyncFunction(2, 3, callback('foo'));
    asyncFunction(5, 5, callback('bar'));
    asyncFunction(10, 10, callback('baz'));
});
console.log(result); // { foo: 5, bar: 10, baz: 20 }

Future paradigm: // no-yield here, call asynchronously, so functions will be called in parallel var foo = someAsyncFunction.future(null, 2, 3); var bar = someAsyncFunction.future(null, 4, 4);

// we are immediately here

// foo, bar - our tickets to the future!
console.log(foo); // { [Function: Future] result: [Getter], error: [Getter] }

// Yield here
console.log(foo.result, bar.result); // 5 8

See more examples in examples directory.

Installation

install npm install sync and then node-fibers your_file.js

Something went wrong with that request. Please try again.