Nutella Peanut-Butter Marshmallow
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    queuedopublic

    queue_do

    异步队列同步化,支持递归嵌套

    基于nodejs模块封装,同样适用于前端的异步同步化。

    安装

    npm install queuedo
    

    web版见:lib/queue_do_webjs.js

    原理和使用

    文章见:http://www.html-js.com/?p=1474

    支持异步同步化 同步化后成队列后执行回调方法 也可以异步处理队列,同时处理完毕后调用回调方法 具体见代码中的注释

    • @param array list 需要处理的数据的数组,作为参数传入handle_func第一个参数。
    • @param function handle_func 处理方法,第一个参数为数组的一个元素,第二个参数传入的是下一个loop方法,第三个参数是其loop的context
    • @param function next_func 队列处理完毕后调用的方法。
    • @param boolen isAsyn 是否异步,如果是true,则不会同步化,可以利用next_func获取处理完毕的信号

    一个例子,递归遍历某个文件夹下所有的图片并压缩到1000宽度。

    var fs   = require('fs');
    var path = require('path');
    //源文件
    var source = '/Applications/XAMPP/xamppfiles/htdocs/htmljs';
    //目标文件
    var target = '/Applications/XAMPP/xamppfiles/htdocs/htmljs_temp';
    //引入gm做图片处理器
    var gm = require('gm');
    var imageMagick = gm.subClass({
        imageMagick: true
    });
    var queue_do=require("./queue_do.js")
    var walk=function(_path,callback,next_func){
        var list=[]
        if(fs.existsSync(_path)){
            var stat=fs.statSync(_path)
            if(stat.isDirectory()){
                fs.readdir(_path,function(error,files){
                    queue_do(files,function(__path,next,context){
                        walk(_path+"/"+__path,callback,function(){
                            next.call(context)
                        })
                    },function(){
                        next_func()
                    })
                })
            }else{
                callback(_path)
                next_func()
            }
        }
    }
    walk(source,function(list){
        console.log(list)
    },function(){
        console.log("all finish!")
    })
    
    

    几个异步方法的同步化: 下面的例子是同步去请求豆瓣三个api,最后请求完后显示出来的例子。 只是示例,完整程序的一部分,不能运行。

    var queuedo=require("queuedo");
    var Douban = require("douban");
    module.exports = function(req, res) {
        var config = {
            app_key:"0bb4b9fc67f9b013231e2df537ed1039",
            app_secret:"e7434521cb0c70ad",
            redirect_uri:"http://localhost:8080/sina_auth_cb",
            access_token:req.cookies.token
        }
        var api = new Douban(config);
        var datas=[
            
        ]
        var functions=[
        function(callback){
            api.shuo.statuses({
                source:config.app_key,
                text:"hello nodejs"+Math.random()
            },function(error,data){
                datas.push({
                    api:"shuo.statuses",
                    data:data
                });
                callback();
            });
        }, function(callback){
            api.shuo.home_timeline({},function(error,data){
                datas.push({
                    api:"shuo.home_timeline",
                    data:data
                })
                callback();
            });
        }, function(callback){
            api.shuo.user_timeline({
                screen_name:"mier963"
            },function(error,data){
                datas.push({
                    api:"shuo.user_timeline",
                    data:data
                })
                callback();
            });
        }];
        queuedo(functions,function(func,next,context){
            func(function(){
                next.call(context);
            });
        },function(){
            res.render("shuo.html",{
                data:datas
            })
        });
    }
    

    install

    npm i queuedo

    Downloadsweekly downloads

    8

    version

    0.9.8

    license

    none

    repository

    github.com

    last publish

    collaborators

    • avatar