首页 教程 API文档

任务队列模块

2015-09-22 15:59:56

属性


复杂程度
依赖模型 events
使用频率 中高
成员类型 静态模块

描述


Std.queue是一个队列模块,通常情况下该模块都用于处理与异步相关的操作,该模块可以让函数组成一个队列,让队列中的函数逐个执行.

成员列表


方法名称 成员类型 描述
pos public 当前队列任务的位置索引号
length protected 当前队列的长度
prev public 执行上一个队列任务
next public 执行下一个队列任务
done public 完成当前任务并执行下一个
has public 判断是否存在指定任务
merge public 合并当前队列
jump public 跳到队列中指定位置的任务
exec public 执行队列中所有任务
push public 添加队列任务
remove public 移除任务
clear public 清空任务队列
complete public 队列任务全部完成
start public 开始执行队列中的任务
error public 任务发生错误

语法



new Std.queue();
new Std.queue(Array tasks);
new Std.queue(Object option);
        

参数


名称 类型 描述
tasks Array 包含需要执行的任务函数的数组,该数组中的所有任务函数将会被添加到队列中
option Object Std.queue模块的参数选项

参数选项


名称 类型 默认值 描述
timeout Number 0 timeout参数规定队列在执行多少秒之后超时,触发timeout事件,默认为0,永不超时
interval Number 0 interval参数规定在重试时候的间隔时间,如果为数字,则为毫秒,可以传递一个带有时间单位的字符串(见Std.convert.timeUit)
tasks Array null 队列中的函数列表
on Object null 该参数规定默认需要绑定的事件.

事件


名称 回调参数 描述
error
类型 描述
Number 当前队列中任务的索引号
Array 执行任务时候传递的参数
当重试指定次数之后仍然失败,就会触发error事件.
complete complete事件的参数为最后一次执行next方法时候传递的参数. complete事件为当任务全部执行完毕之后触发的事件.
jump
类型 描述
Number 要跳转到的位置索引号.
Array 跳转时候传递的参数,如果是通过next,prev等方法执行的,那么这个参数为一个包含next或者prev时候的参数的数组.
当任务跳到一个位置时候触发的事件.
start 当执行start任务的时候触发的事件.
timeout 超时时候触发的事件

相关例子


例子1


//创建一个队列的模块实例,并且增加3个队列函数
var queue = new Std.queue([
    function(urlAddress){
        Std.ajax.get(urlAddress,function(){
            //当请求成功之后,执行下一个任务
            queue.next("/index.php");
        })
    },
    function(urlAddress){
        Std.ajax.get(urlAddress,function(responseText){
            //当请求成功之后,执行下一个任务
            queue.next(responseText);
        }).error(function(){
            //如果ajax请求错误,重试,最大重试4次,如果4次都失败了,继续执行下一个
            queue.retry(4,[urlAddress],function(){
                queue.next("failed");
            });
        });
    },
    function(responseText){
        setTimeout(function(){
            console.log(responseText)
            queue.next();
        },500);
    }
]);

//添加complete事件,待队列全部完成之后触发
queue.on("complete",function(){
    console.log("complete");
});

//开始队列任务,从0开始,传递一个参数
queue.start("/robots.txt");

        

例子2


var queue = new Std.queue();
queue.push(function(urlAddress){
    Std.ajax.get(urlAddress,function(){
        //当请求成功之后,执行下一个任务
        queue.next("/index.php");
    })
}).push(function(urlAddress){
    Std.ajax.get(urlAddress,function(responseText){
        //当请求成功之后,执行下一个任务
        queue.next(responseText);
    }).error(function(){
        //如果ajax请求错误,重试,最大重试4次,如果4次都失败了,继续执行下一个
        queue.retry(4,[urlAddress],function(){
            queue.next("failed");
        });
    });
}).push(function(responseText){
    setTimeout(function(){
        console.log(responseText)
        queue.next();
    },500);
});

//添加complete事件,待队列全部完成之后触发
queue.complete(function(){
    console.log("complete");
});

//开始队列任务,从0开始,传递一个参数
queue.start("/robots.txt");