javascript延迟对象

Posted 圣耀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 = function (url) {
    return $.ajax({
        type: get,
        url: url
    });
}
fetchData()        //执行函数返回一个Deferred对象实例
    .done()        //接受一个函数,ajax请求成功调用
    .fail()        //接受一个函数,ajax请求失败调用
    .done()        //第二个成功状态的回调方法
    .fail()

 

 

 

以上是关于javascript延迟对象的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段12——JavaScript的Promise对象

Android中切换标签片段之间的延迟

常用Javascript代码片段集锦

VSCode自定义代码片段——JS中的面向对象编程

JavaScript单行代码,也就是代码片段

VSCode自定义代码片段9——JS中的面向对象编程