avril.queue

an async flow control queue module

Stats

StarsIssuesVersionUpdatedCreatedSize
avril.queue
300.0.316 years ago7 years agoMinified + gzip package size for avril.queue in KB

Readme

#avril.queue avril.queue is an async flow control tool, it tries to ease the pain of callback.

It's pretty simple to use. Let's rock.

##install avril.queue

npm install avril.queue

for now avril.queue only support node env, I would try to make it support the browsers later.

/*
assume that we have a file "the/path/of/file.txt"
the file content is :
1
2
3
*/

func, $await , $each

var avQ = require('avril.queue');
var q = avQ();
     
/* return $AwaitData object */
var $fileContent = q.$await(fs.readFile, 'the/path/of/file.txt'
, function(err, fileContent){
  this.error(err);
  return fileContent;
});

/* conver the $awaitData' result , return a new $AwaitData object */
var $ids = $fileContent.conver(function($org){
  return $org.result().split('\n');
}); 

/*  return $AwaitData object which result is list of */
var $users = q.$each(db.User.findById, $ids, function(err, user){
  this.error(err);
  return user;
}); 

q.func(function(){
  console.log( $fileContent.result() )
  console.log( $users.realResult() );
});

###$$await & $$each

var avQ = require('avril.queue');
var q = avQ();

/* return $AwaitData object */
var $fileContent = q.$$await(fs.readFile, 'the/path/of/file.txt'); 

/* conver the $awaitData' result , return a new $AwaitData object */
var $ids = $fileContent.conver(function($org){
  return $org.result().split('\n');
}); 

/*  return $AwaitData object which result is list of */
var $users = q.$$each(db.User.findById, $ids); 

q.func(function(){
   console.log( $fileContent.result() )
   console.log( $users.realResult() );
});

###use $await, $each, with context

var avQ = require('avril.queue');
var q = avQ();
   
/* return $AwaitData object */
var $fileContent = q.$await(fs, fs.readFile, 'the/path/of/file.txt'
, function(err, fileContent){
  this.error(err);
  return fileContent;
});

/* conver the $awaitData' result , return a new $AwaitData object */
var $ids = $fileContent.conver(function($org){
  return $org.result().split('\n');
}); 

/*  return $AwaitData object which result is list of */
var $users = q.$each(db.User, db.User.findById, $ids, function(err, user){
    this.error(err);
    
    /* use this.$$await instead of q.$$await
    * use this.$$wait, the queue will wait the asynCall ready then go to next step
    * use q.$$wait only append current asynCall to the end of the queue, it's not what we want
    */
    user.blogs = this.$$await(db.Blogs, db.Blogs.findByUserId, user.id);
    
    return user;
}); 

q.func(function(){
   console.log( $fileContent.result() )
   console.log( $users.realResult() );
});

###use q.$if($awaitData, trueFunc).$else(falseFunc)

var avQ = require('avril.queue');
var q = avQ();
var filePath = 'the/path/of/file.txt';
var $fileExisted = q.$await(fs.exists, filePath);
var $fileContent;
q.$if($fileExited, function(){
    /* use this.$$await instead of q.$$await
    * use this.$$wait, the queue will wait the asynCall ready then go to next step
    * use q.$$wait only append current asynCall to the end of the queue, it's not what we want
    */
    $fileContent = this.$$await(fs.readFile, filePath); 
})
q.func(function(){
    if($fileContent){
        console.log($fileContent.result());
    }
});

var otherPath = 'the/path/of/otherFile.txt';

q.$if($fileContent, function(){
    $fileContent = this.$$await(fs.readFile, filePath);
}).$elseIf(q.$await(fs.exits, otherPath), function() {
    $fileContent = this.$$await(fs.readFile, otherPath);
});

q.func(function(){
    if($fileContent){
        console.log($fileContent.result());
    }
})

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.