关于JQuery的$.Deferred对象的简单使用

Deferred是JQuery的一个延迟对象,意思是函数延迟到某个点才开始执行,改变执行状态的方法有两个(成功:resolve和失败:reject),分别对应两种执行回调(成功回调函数:done和失败回调函数:fail) 某些耗时比较长的javascript操作A方法,比如ajax读取服务器数据,不是立即返回结果的,而javascript操作B方法必须等A操作完成才能执行(或者需要用到A方法的返回结果),此时Deferred就派上用场了。

Deferred是一种将异步处理串联书写并执行的机制,Deferred对象是一种具有unresolved,resolved,rejected中某一种状态的对象。Deferred内部机制是先注册回调函数,Deferred对象状态发生变化时执行该函数,是一种提高代码可读性的机制。

Deferred对象的状态迁移只能发生一次,以then()、done()、fail()、always()、pipe()指定后续函数的方法,通过when()来并行处理,将Deferred对象中的一部分方法删除后得到是Promise对象,对状态的管理由最初创建该Deferred对象的所有者来执行。

    function A(url, param, method) {
        var asycRs = $.Deferred();
        if (null != method && '' != method) {
            if ('post' === method.toLowerCase()) {
                $.post(url, param, function (data) {
                    asycRs.resolve(data)
                });
            }
            if ('get' === method.toLowerCase()) {
                $.get(url, param, function (data) {
                    asycRs.resolve(data)
                });
            }
        } else {
            // TODO 默认get方式请求
            $.get(url, param, function (data) {
                asycRs.resolve(data)
            });
        }
        return asycRs;
    }

function B(data) {
       console.log(data); // TODO data为异步操作A方法完成,返回的结果
);

$.when(A(url, param, 'post')).done(function (data) {
       B(data); // TODO 异步操作A方法完成,返回data给B方法执行
});  

猜你喜欢

转载自blog.csdn.net/u014698745/article/details/94330566
今日推荐