node package manager

Introducing npm Enterprise add-ons. Integrate third-party dev tools into npm…


Ensure FIFO ordering of asynchronous calls


Force FIFO on asynchronous callbacks


Sometimes order must be guaranteed. Consider the following pseudo-JS, in which UDP packets are received, lookups are made on the packets, then the packets are passed to the next component:

socket.on('message', function (message) {
    timeConsumingLookup(message, function (result) {
        // we can get here out of order! 
        passToNext(message, result);

Assuming timeConsumingLookup can take a relatively long time, we can accumulate multiple packets in the timeConsumingLookup processing simultaneously, and may get to its callback out-of-order. In other words, we might call passToNext on a result for a packet that was received after another packet for which timeConsumingLookup is still processing.


Use Fiforce!

var fiforce = new Fiforce();
socket.on('message', function (message) {
    timeConsumingLookup(message, fiforce(function (result) {
        // we only get here in order! 
        passToNext(message, result);