var JS异步编程优化 = {
}
消息触发:
将函数依赖关系先进行声明,并在函数执行完
毕时发出执行完毕的消息,如果依赖函数都发
出执行完毕的消息,则该依赖函数开始执行
代表:EventProxy.js
Slide 19
Slide 19 text
var 消息触发 = {
}
var proxy = new EventProxy();
proxy.assign( 'A', 'B', 'C', D );
A ( function() {
proxy.trigger( 'A' );
});
B ( function() {
proxy.trigger( 'B' );
});
C ( function() {
proxy.trigger( 'C' );
});
Slide 20
Slide 20 text
var 消息触发 = {
}
优点:实现简单,较易理解,并有效解决
了某些时候函数深度嵌套的问题,同时能
降低代码的耦合度
缺点:需要显式的书写函数依赖声明代码
Slide 21
Slide 21 text
var Promise/A = {
}
CommonJS提出的异步编程模型规范
A promise is defined as an object that has a function as
the value for the property ‘then‘.
then(fulfilledHandler, errorHandler, progressHandler)
then方法返回另一个promise对象,形成promise管道
目的:
提供统一的异步编程API规范
var Wind.js = {
}
Wind.js is an advanced library which enable
us to control flow with plain JavaScript for
asynchronous programming (and more)
without additional pre-compiling steps.
Slide 40
Slide 40 text
var Wind.js小例子 = {
}
var printAsync = eval(Wind.compile("async", function (text) {
$await(Wind.Async.sleep(1000));
console.log(text);
}));
var task = printAsync("Hello World");
tack.start();
1s后控制台打印出信息
Slide 41
Slide 41 text
var Wind.js = {
}
使用eval对定义的异步函数做二次编译
用setTimeout来模拟实现$wait()的阻塞等待
真正做到了同步编写异步执行
Slide 42
Slide 42 text
var Wind.js = {
}
Wind.js的确十分强大,也确实从解决实际问题出发的
But
曲高和寡,真正在项目中使用的并不多,许多jser也
并不接受
Slide 43
Slide 43 text
var Wind.js = {
}
Wind。Js之我见:
1. 依赖eval(eval is evil让大多数人望而却步,
即便老赵跟着别人屁股后面喊...)
2. 缺少文档
3. 二次编译调试的复杂性(有还是没有啊?)
Slide 44
Slide 44 text
var Wind.js = {
}
Wind。Js之我见:
Wind.js是一个创新性和实用性兼具的
优秀JS库,能够很大程度解决异步流程
混乱问题,如果你的项目逻辑复杂需
要解决,为什么不用呢?