callbackNoHell

callback, but no hell !!!

启动

1
2
3
git clone https://github.com/bonjs/callbackNoHell.git
npm install
node app

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
var callbackNoHell = function(fns) {
var _promise = arguments.callee;

var sliceProto = Array.prototype.slice;

var params = [function(result) {
result && _promise.apply(null, [fns].concat(sliceProto.apply(arguments)));
}].concat(sliceProto.call(arguments, 1));

var fn = fns.shift();
fn && fn.apply(null, params);
};

调用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function f1(f) {
$.get('data/step1.json', {}, function(d) {
if(d.success) {
console.log('step1成功');
f(true, d.step2Id); // 下个函数请示可能依赖这次的请求结果
} else {
f(false);
}
});
}
function f2(f) {
$.get('data/step2.json', {}, function(d) {
if(d.success) {
console.log('step2成功');
f(true, d.step3Id); // 下个函数请示可能依赖这次的请求结果
} else {
f(false);
}
});
}
function f3(f) {
$.get('data/step3.json', {}, function(d) {
if(d.success) {
console.log('step3成功');
f(true, 'step3成功');
} else {
f(false);
}
});
}

callbackNoHell([f2, f1, f3]);