jq: callbacks/deferred

本文深入探讨了JavaScript中Callbacks和Deferred对象的应用,展示了如何通过Callbacks实现观察者模式,管理多个回调函数,并介绍了Deferred对象在处理异步操作时的作用,包括其状态管理和回调函数链的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

callbacks 多个回调函数 管理回调函数 回调对象

        function wakeUp() {
    console.log('早上好')
}
function eating() {
    console.log('吃早饭')
}

var cd = $.Callbacks('unique');   // 返回一个对象 可使用add在里面添加函数
cd.add([wakeUp, wakeUp]);         // 增加wakeUp这个函数
cd.add(eating);                   // 增加eating这个函数

$('#app').click(function() {    // 点击起床
    cd.fire();                  // 触发
})

      

v2-2dac33fdd97e5c4dcbbc5b8666c08fdc_b.jpg

可以在不同作用域下,只要能够增加到callbacks中,触发的时候都可以执行到。

callbacks模式是观察者模式,一对多。


在执行$.Callbacks()中可以传固定的字符串关键字
once 只能fire一次
memory 前面触发过一次fire,后面添加的回调函数就会自动触发
unique 去重回调函数
stopOnFalse 如果在执行前面的时候遇到return false 那么执行结束

大致的源码:

        var cb = {
    callbacks: [],
    add: function(fn) {             // 增加
        this.callbacks.push(fn);
    },
    fire: function() {              // 触发
        this.callbacks.forEach(function(fn) {
            fn();
        })
    }
};
cb.add(function wakeUp() {
    console.log('zao');
})
cb.add(function eating() {
    console.log('chizaofan');
})
cb.fire();

      

deferred 延迟对象

状态:
dtd.resolve(); // 成功状态
dtd.reject(); // 失败状态
dtd.notify(); // 进行中

        var dtd = $.Deferred();     // 创建延迟对象
// dtd.resolve();   // 成功状态
// dtd.reject();   // 失败状态
dtd.notify(); // 进行中

dtd.done(su).fail(er).progress(ing);// 上面对应的状态可以调用这里对应的函数
function su() {
    console.log('成功了')
}
function er() {
    console.log('失败了')
}
function ing() {
    console.log('进行中')
}

      

v2-976dd8ce3e5f37942b23aca7763b54aa_b.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值