v0.11 有了 q + yield 以后写起来回调基本不用考虑了
写函数的时候按 node 格式写
用的时候当普通函数用就行
不用手工去调 callback,直接 return
先准备一下工具:
var q = require('q');
var spawn = function (gen, callback) {
q(q.async(gen)()).nodeify(callback);
};
定义个标准格式的 nodejs 函数:
var foo = function (arg, .., callback) {
....
};
然后可以写:
var bar = function (callback) {
spawn(function * () {
var o1 = yield q.nfcall(foo, ..);
var o2 = yield q.nfcall(foo, o1, ..);
return o2.blah();
}, callback);
};
等价的旧写法是……
var bar = function (callback) {
foo(function (err, o1) {
if (err) {
callback(err)
} else {
foo(o1, function (err, o2) {
if (err) {
callback(err);
} else {
try {
callback(null, o2.blah());
} catch (err2) {
callback(err2);
}
}
});
}
});
}
【 在 ttl (小驴) 的大作中提到: 】
: 话说都是用workflow / promise库来解决callback hell问题的,写起来完全不会痛苦,不过要是有个菜鸟在中间漏了些返回点或者搞出应该只调用一次的地方多重回调,调试起来很痛苦倒是真的。
--
修改:withinsea FROM 123.119.157.115
FROM 123.119.157.115