我在理解回调的行为时遇到了一些麻烦。 例如,以下代码无法按预期的方式工作。 我试过异步库,但没有获得所需的行为。Nodejs + Express + mysql回调问题
module.exports.list = function (req, res) {
model.list(id, idx, function(boo){
async.forEachOf(boo, function (b, k, e) {
model.sublist(b.text, function(foo) {
b.foo = foo;
})
})
res.json({ data : boo }) //boo dont have foo porperty
});
};
model.list = execute some big mysql query, and return rows (boo is an array).
model.sublist = same as model.list
编辑解决方案:
module.exports.list = function (req, res) {
model.list(id, idx, function(boo){
async.forEachOf(boo, function (b, k, e) {
model.sublist(b.text, function(foo) {
b.foo = foo;
e();
})
})
res.json({ data : boo })
});
};
可能重复[为什么我的变量在函数内部修改后没有改变? - 异步代码引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) –
应该移动' res.json(...)'到第二个回调中,在'model.sublist'之后# – tmquang6805
WHY节点框架给你一个响应对象,你可以发送消息而不是让你的函数返回一个值(框架通常工作的方式在其他语言中)完全是这样,你可以异步获取数据,然后发送响应。所以只需在正确的地方发送回复,而不是在收到之前。 – slebetman