smartJS 0.1 API 讲解 - PromiseEvent

上篇简单的介绍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,布布扣,bubuko.com

时间: 2024-12-15 14:24:26

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

smartJS 0.1 API 讲解 - FlowController

本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自己做一个总结,也希望分享一些东西给大家借鉴. 而对smartjs的来说,整体思想都并不是为了实现什么功能.特效和内容.而是希望体现一些前端编程模式或者思想上的内容,这次的0.1版本中,主要体现了一些面向切面编程.非侵入式编程.异步编程,生命周期控制的一些思想.包括后续的oop的内容,基于策略的数据管

smartJS 0.1 API 讲解 - Trigger

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

smartjs 0.2 OOP讲解 - Klass 类继承

SmartJS2.0加入OOP的功能.OOP包括klass与factory两个对象. Klass 类继承 与其他的类继承相比,smartjs使用了执行指针的概念(后面例子中会介绍),另外提供base基类和初始化控制的扩展功能. 首先来看看接口: var _klass = st.klass(name, prop, parent, config); //new _klass() 与 _klass()效果相同,实现了自初始化功能更 var obj = new _klass(); name : 类名 p

smartjs 0.2 OOP讲解 - factory

本篇介绍OOP的第二个对象factory.在以往项目中其实真正使用klass的地方相当少,而factory则是十分常见的. 在smartjs中的factory并不是指的是工厂模式.在factory要求定义一个基础对象,这个对象可以是基类,也可以是模板对象或者是接口.然后factory就已此基础对象为基础,其他添加或者创建的对象,继承或者是复制基础对象的属性和方法.factory在提供一系列方法来对这些对象做控制. factory经过简单的处理可以实现工厂.外观.模板等设计模式. 接口说明 //多

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRequestOperationManager,AFURLSessionManager是基于 NSURLSessionConfiguration(IOS 7

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

资料在百度云盘 一.jquery  API讲解 1.jquery  api如何使用 jquery  api http://www.hemin.cn/jq/ 2.常用api讲解 选择器: 通过$()获取jquery对象的常用方式: #div1          根据元素id获取 .red             根据class获取 div               根据标签名字获取 #div1 ul li input  混合模式 li.red 查找带red这个class的li input[typ

OAuth2.0学习(5-4)新浪开放平台-微博API-使用OAuth2.0调用API

使用OAuth2.0调用API 使用OAuth2.0调用API接口有两种方式: 1. 直接使用参数,传递参数名为 access_token URL 1 https://api.weibo.com/2/statuses/public_timeline.json?access_token=abcd 2.在header里传递,形式为在header里添加 Authorization:OAuth2空格abcd,这里的abcd假定为Access Token的值,其它接口参数正常传递即可. 注:所有的微博开放

【循序渐进地学好OpenCV&4】使用2.0的API显示图片以及OpenCV的自动化内存管理

1.0 显示图片和2.0显示图片的比较 在[[循序渐进地学好OpenCV&2]显示图片--OpenCV的"起手式"](http://blog.csdn.net/zgljl2012/article/details/48306299)这篇文章里,我们使用了OpenCV 1.0的API实现了从磁盘读取文件并显示,下面是代码: #incldue "cv.h" #include "highgui.h" int main(int argc, char

Bluetooth 4.0之Android 讲解

Android平台包含了对蓝牙网络协议栈的支持,它允许一个蓝牙设备跟其他的蓝牙设备进行无线的数据交换.应用程序通过Android蓝牙API提供访问蓝牙的功能.这些API会把应用程序无线连接到其他的蓝牙设备上,具有点到点和多点无线特征. 使用蓝牙API,Android应用程序能够执行以下功能: 1.  扫描其他蓝牙设备 2.  查询本地已经配对的蓝牙适配器 3.  建立RFCOMM通道 4.  通过服务发现来连接其他设备 5.  在设备间传输数据 6.  管理多个蓝牙连接 基础 本文介绍如何使用A