zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    Kubernetes 部署 Kubernetes-Dashboard v2.0.0
    Kubernetes 部署 Metrics Server 获取集群指标数据
    内网终端安全建设(转)
    内网安全运营的逻辑体系架构(转)
    thinkphp5配置文件
    MySQL索引失效的几种情况
    workman使用
    长连接技术(Long Polling)
    php好文章的记录
    php类与对象得使用场景
  • 原文地址:https://www.cnblogs.com/chenlogin/p/6536708.html
Copyright © 2011-2022 走看看