Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Syncify is an innovative alternative to Async.js, Step and Node Fibers. It allows you to deal with "Callback Hell" in a very simple way.
It works just like Node Fibers in that it completely eliminates the need for callbacks. But, unlike Node Fibers, it also works on the browser!
Assume that we have a very simple async function that issues an AJAX request to some remote REST API
ajax( url, callback )
This would be a typical composite function that calls the ajax() service several times:
function getFullName( id, cb ){
ajax( "/user/" + id + "/name", function( err, name ){
if ( err ){
cb( err );
} else {
ajax( "/user/" + id + "/lastname", function( err, lastname ){
if ( err ){
cb( err )
} else {
cb( null, name + " " + lastname )
}
})
}
})
}
Uff. That's a lot of nested callbacks. Let's see if we can do better.
// 1. magically remove the callback from the ajax() service
ajax = syncify( ajax )
// 2. create a composite function. but this time without callbacks
function getFullName( id ){
return ajax( "/user/" + id + "/name" ) + " " + ajax( "/user/" + id + "/lastname" )
}
// 3. add a callback to the resulting function so we can later use it
getFullName = syncify.revert( getFullName )
Both functions ( the one with syncify and the one without syncify ) are equivalent. You can call them like this:
getFullName( "aldo", function( err, res ){ console.log( res )})
Isn't that awesome?
Syncify allowed us to magically get rid of callbacks while creating a composite function. It is not just cleaner, but it also allows us to take advantage of the full power of Javascript.
You can use any function. For example:
function getNameUC( id ){
return ajax("/user/" + id + "/name").toUpperCase()
}
You can even process a collection using Array.map()!
function getFriendNames( id ){
return ajax("/user/" + id + "/friends").map( function( friend ){
return ajax("/user/" + friend + "/name" ) + " " + ajax("/user/" + friend + "/lastname" )
})
}
Or, same as above but using the function we had already defined
function getFriendNames( id ){
return ajax("/user/" + id + "/friends").map( getFullName )
}
You can literally do anything. Syncify allows you to escape from Callback Hell so you can continue coding in regular Javascript.
Well. To be honest. You cannot do just anything. You cannot use Syncify to deal with functions that mutate application state. That means you can exclusively use it with read-only functions.
While this sounds like a limitation, in practice it is not. Syncify is much better at composing queries ( functions that fetch data and draw the UI ) while Async.js is better at composing business logic. You can combine them.
To compensate for this limitation, Syncify has grown some cool tricks. For example, transparent concurrency.
You can make the above method much faster by using syncify.parallel:
function getFriendNames( id ){
var friends = ajax("/user/" + id + "/friends")
syncify.parallel(function(){
// all requests issued within this block will be parallelized
friends.map(function(){
return ajax("/user/" + id + "/name" ) + " " + ajax("/user/" + id + "/lastname" )
})
})
}
The syncify.parallel()
function is explained in this video.
npm install syncify
Syncify has no external dependencies. Just include it like you would any JS library:
<script src="http://aldonline.github.io/syncify/build/syncify-1.1.0.min.js"/>
If you prefer you can find the .js and .min.js builds in the /build directory.
Takes an async function and returns a syncified version
Takes a syncified function ( or a function that contains nested syncified functions ) and returns an equivalent async function ( one that takes a callback ). This function is the counterpart/opposite of syncify()
.
See video ( top of the page )
See video ( top of the page )
FAQs
A radically simpler way to deal with asynchronous functions in javascript
The npm package syncify receives a total of 3 weekly downloads. As such, syncify popularity was classified as not popular.
We found that syncify demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.