惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
The Register - Security
The Register - Security
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
博客园 - 司徒正美
罗磊的独立博客
U
Unit 42
S
SegmentFault 最新的问题
Y
Y Combinator Blog
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
J
Java Code Geeks
Schneier on Security
Schneier on Security
Know Your Adversary
Know Your Adversary
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
V
Vulnerabilities – Threatpost
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
L
Lohrmann on Cybersecurity
A
About on SuperTechFans
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
S
Securelist
A
Arctic Wolf
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
Scott Helme
Scott Helme
博客园 - 聂微东
博客园 - 【当耐特】
T
Tenable Blog
I
Intezer
D
DataBreaches.Net
B
Blog RSS Feed
Security Latest
Security Latest
C
Cisco Blogs
T
Tor Project blog
N
Netflix TechBlog - Medium

博客园 - Roy Zhang

让文档和Demo生成更加简单和强大 - SmartDoc 0.1.1 说明 SmartDoc(YUIDoc) 注释编写 JS文档和Demo自动化生成工具 - SmartDoc发布 smartjs - DataManager 场景示例分析 - 数据懒加载 smartjs - DataManager API smartjs 0.3 DataManager 发布&介绍 SmartJS 系列规划分享和背景介绍 smartjs 0.2 OOP讲解 - factory smartjs 0.2 OOP讲解 - Klass 类继承 smartjs 0.2发布 - 新增oop模块&AOP增强 smartJS 0.1 API 讲解 - FlowController smartJS 0.1 API 讲解 - Trigger SmartJS 第一期(0.1)发布 - AOP三剑客 SmartUI2.0后续声明 JQuery SmartUI 2.0 方案启动 JQuery Smart UI 开发规范&API文档发布 JQuery Smart UI与Moss结合演示 JQuery Smart UI 快捷开发实例应用(二)— 开发模式【从项目开发流程说起】 告别aspx,高性能快捷开发 — JQuery Smart UI 快捷开发实例应用(一)入门【后篇】
smartJS 0.1 API 讲解 - PromiseEvent
Roy Zhang · 2014-06-08 · via 博客园 - Roy Zhang

上篇简单的介绍smartjs了一些通用方法的api。这篇介绍基础的PromiseEvent(这个名字一直没想好,以前准备用callbacks的,但避免与jquery混淆,st的命名空间可以直接挂到$上)

基于事件和promise的回调管理,类似于jquery的callbacks,但具有结果传递,优先级,事件参数,promise控制等功能

接口方法

var events = st.promiseEvent(mode);

events.add(name,function(e,arg,……){
    
},priority,eventMode)

event.fire(arg,...);


参数说明

mode :once和callback两种模式,(callback模式不会加入事件参数)

e.stopProgation() 阻止后续回调

    event.add(name,fn,priority,eventMode) 添加事件回调, name :加入的事件回调名称; priority :权重设置 ;eventMode :加入的事件模式;once;

  event.fire(arg,,,,) 执行事件回调

  event.fireWith(context,[args]) 使用上下文回调

  event.has(name) 根据回调名称判断是否已注册回调

  event.remove(name) 根据名称删除回调

  event.clear()   清除所有回调

  e事件参数

e.result 上一个回调的结果

e.remove() 删除当前回调

e.promise() 返回契约

e.resolve() 解决契约

e.reject() 拒绝契约

使用样例

普通方式

    var calls = st.promiseEvent(),
        result = [];

    //测试使用once模式,执行一次既销毁
    calls.add('call1', function(e, text) {
        result.push(text+'1');
    },"once")

    calls.add('call2', function(e, text) {
        //效果同“once”
        e.remove()
        result.push(text+'2');
    })

    //执行,结果 [call1,call2]
    calls.fire('call');
    

权重,默认权重为0,可以通过st.conf({defPriority:100})来设置,相同权重先入先出

 result = [];
    //权重
    calls.add('p', function(e, text) {
        result.push('def');
    })

    calls.add('p10', function(e, text) {
        result.push(10);
    },10)

    calls.add('p50', function(e, text) {
        result.push(50);
    },50)
    
    calls.add('pDef', function(e, text) {
        result.push('def2');
    })
    
    //执行,结果 [50,10,def,def2]
    calls.fire();

stopProgation,停止后续回调

//stopProgation,停止后续回调
    calls.add('stop',function(e){
        e.stopPropagation();
        result.push("stop");
    },20)
    
    //执行,结果 [50,stop]
    calls.fire();


结果传递,promiseEvent回将return的结果或者resolve的非undefined的结果记录下来并向下传递;

    //result传递模式
    calls.add('c1', function(e, text) {
        return text + "-c1";
    })

    calls.add('c2', function(e, text) {
        return e.result + "-c2";
    })

    calls.add('c3', function(e, text) {
       return e.result + "-c3";
    })
    
    //执行,结果 test-c1-c2-c3
    calls.fire('test');

Prmose模式,

可以与jquery的promise结合使用 

$.when(calls.fire()).done(function(result){

})

//清除回调
    calls.clear();
    result = [];

    //promise模式
    calls.add("c1", function(e) {
        setTimeout(function() {
            result.push("c1");
            e.resolve();
        }, 100);
        return e.promise();
    });

    calls.add("c2", function(e) {
        result.push("c2");
    });

    //执行,结果 [c1,c2]
    calls.fire();


mode设置,once(执行及销毁)和callback(简单回调)

//callback模式 & once模式
    var calls2 = st.promiseEvent("callback once");

    //callback不存在e事件参数,只是具有见的回调管理
    calls2.add('c1', function(text) {
        return text + "-c1";
    })

    //执行第一次,结果 test-c1
    calls2.fire('test');

    //执行第二次,因为once模式,结果 undefined
    calls2.fire('test');


更多的例子请参考smartjs上的测试用例