异步流程控制
主流的解决回调金字塔
事件发布订阅模式
异步流程控制库
Promise
Generator
事件发布订阅模式
$.get("http://data1_source", function (data1) {
$.get("http://data2_source", function (data2) {
$.get("http://data3_source", function (data3) {
var html = fuck(data1, data2, data3);
render(html);
});
});
});
(function () {
var count = 0;
var result = {};
$.get('http://data1_source', function (data) {
result.data1 = data;
count++;
handle();
});
$.get('http://data2_source', function (data) {
result.data2 = data;
count++;
handle();
});
$.get('http://data3_source', function (data) {
result.data3 = data;
count++;
handle();
});
function handle() {
if (count === 3) {
var html = fuck(result.data1, result.data2, result.data3);
render(html);
}
}
})();
var ep = new eventproxy();
ep.all('data1_event', 'data2_event', 'data3_event', function (data1, data2, data3) {
var html = fuck(data1, data2, data3);
render(html);
});
$.get('http://data1_source', function (data) {
ep.emit('data1_event', data);
});
$.get('http://data2_source', function (data) {
ep.emit('data2_event', data);
});
$.get('http://data3_source', function (data) {
ep.emit('data3_event', data);
});
fn1();
fn2();
fn3();
var stack = []; stack.push(fn1); stack.push(fn2, fn3); stack.forEach(function(fn) { fn() });
异步流程控制
var stack = [];
function fn1() {
console.log('第一个调用');
}
stack.push(fn1);
function fn2() {
console.log('第二个调用');
}
stack.push(fn2, function() { console.log('第三个调用') });
stack.forEach(function(fn) { fn() });
var stack = [];
function fn1() { console.log('第一个调用') };
stack.push(fn1);
function fn2() {
setTimeout(function fn2Timeout() {
console.log('第二个调用');
}, 0);
}
stack.push(fn2, function() { console.log('第三个调用') });
stack.forEach(function(fn) { fn() });
遇到了问题
function fn2() {
setTimeout(function() {
fn2Timeout();
fn3();
}, 0);
}
function fn2() {
setTimeout(function fn2Timeout() {
console.log('第二个调用');
fn3();
}, 0);
}
var index = 0;
function next() {
var fn = stack[index];
index = index + 1;
if (typeof fn === 'function') fn();
}
function fn2() {
setTimeout(function fn2Timeout() {
console.log('第二个调用');
next();
}, 0);
}
谢谢
deck
By Joson Chen
deck
- 279