首页 > 代码库 > javascript延迟对象

javascript延迟对象

1、模拟任务队列:
function taskQueue() {    var taskList = [];    var isRun = false;         this.addTask = function (task) {        task.status = waiting;        taskList.push(task);    };     function run(task) {        if (!task.validate()) {            task.status = invalidate;            isRun = false;            return;        }        function endWrap() {            if(task.end) task.end.apply(task,arguments);            task.status = done;            isRun = false;        };        task.status = running;        if (task.isAsyn) {            if(task.begin) task.begin();            task.run(endWrap);        }        else {            if(task.begin) task.begin();            task.result = task.run();            endWrap();        }    }     setInterval(function () {        if (taskList.length > 0 && !isRun) {            isRun = true;            run(taskList.shift());        }    }, 100);}

task增加一个validate方法,用于检测此时是否有必要再执行先前已入队列的任务。task增加了begin的方法,这是供该task被执行时可以被回调,增加了result属性,如果是同步的task,被执行时可以得到返回值。如果是异步endWarp作为callback传入。至于异常,只能task自己去保证不会抛出异常,否则这个队列会一直阻塞。

2、在jquery 1.5 版本之后,ajax请求的内部实现被重写。$.ajax方法返回的不再是一个jqXHR对象,而是一个Deferred对象。可以使用$.Deferred对象的api进行一些异步操作。
主要包括.done.fail.then,.pipe$.when方法。
var fetchData =http://www.mamicode.com/ function (url) {    return $.ajax({        type: get,        url: url    });}fetchData()        //执行函数返回一个Deferred对象实例    .done()        //接受一个函数,ajax请求成功调用    .fail()        //接受一个函数,ajax请求失败调用    .done()        //第二个成功状态的回调方法    .fail()

 

 

 

javascript延迟对象