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

PromiseEvent

基于事件和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上的测试用例

  

  

smartJS 0.1 API 讲解 - PromiseEvent的更多相关文章

  1. smartJS 0.1 API 讲解 - FlowController

    本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自 ...

  2. smartJS 0.1 API 讲解 - Trigger

    上篇介绍了PromiseEvent,本篇介绍Trigger - 基于Promise的aop的体现:(感觉自己的对这些命名一直都很挫,也懒得想了,所以就凑合的用) Trigger 在目标对象上加入触发器 ...

  3. smartjs 0.2 OOP讲解 - Klass 类继承

    SmartJS2.0加入OOP的功能.OOP包括klass与factory两个对象. Klass 类继承 与其他的类继承相比,smartjs使用了执行指针的概念(后面例子中会介绍),另外提供base基 ...

  4. smartjs 0.2 OOP讲解 - factory

    本篇介绍OOP的第二个对象factory.在以往项目中其实真正使用klass的地方相当少,而factory则是十分常见的. 在smartjs中的factory并不是指的是工厂模式.在factory要求 ...

  5. 【jquery】 API讲解 内部培训资料

    资料在百度云盘 一.jquery  API讲解 1.jquery  api如何使用 jquery  api http://www.hemin.cn/jq/ 2.常用api讲解 选择器: 通过$()获取 ...

  6. AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

    AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API ...

  7. Spark 下操作 HBase(1.0.0 新 API)

    hbase1.0.0版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API.并且了解下如何与当下正红 ...

  8. ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现

    from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...

  9. Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Zepto 1.0 中文手册,Zepto 1.0 API-translate by yaotaiyang

    Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Z ...

随机推荐

  1. tomcat中server.xml配置详解(转载)(二)

    转载自:https://www.cnblogs.com/starhu/p/5599773.html 一:<Connector>元素 由Connector接口定义.<Connector ...

  2. Vue 组件通信(组件间通信)

    1.中央事件总线bus <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&qu ...

  3. JConsole的使用手册 JDK1.5(转)

    一篇Sun项目主页上介绍JConsole使用的文章,前段时间性能测试的时候大概翻译了一下以便学习,今天整理一下发上来,有些地方也不知道怎么翻,就保留了原文,可能还好理解点,呵呵,水平有限,翻的不好,大 ...

  4. 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级

    目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...

  5. maven打包时加入依赖包及加入本地依赖包

    maven打包的时候默认是不加入依赖的jar包的,所以想打出一个独立的可运行jar包的话直接mvn clean install package是不行的.需要略改动下pom文件,加入如下plugin & ...

  6. Incorrect integer value: '' for column 'mid' at row 11366Incorrect integer value: '' for column 'mid' at row 1,自增字段为空,添加记录时出错

    在本地机器做测试时,数据可以正常添加,但是将代码放置到服务器上时,提示:Incorrect integer value: '' for column 'mid' at row 11366Incorre ...

  7. stm32中的数据类型定义

    STM32F10X.H #include "core_cm3.h" #include "system_stm32f10x.h" #include <std ...

  8. 英文版windows乱码问题(win7/8/10)

  9. 在Unity控制台下使用富文本

    之前都不知道,最近看了csdn一位开发者的博文突然发现 <b>asd</b> <color="red">asd</color> &l ...

  10. Atitit.木马病毒的操作注册表原理 系统服务管理器 atiSysService

    Atitit.木马病毒的操作注册表原理 系统服务管理器 atiSysService 1. atiSysService1 2. atiSysService  原理1 3. Java code1 4. 参 ...