我已经使用Node.js编程了一段时间,我发现自己越来越厌烦需要链接回调.例如,当您需要数据库中的多个模型时,如下所示:
Person.findOne({ 'name.last': 'Ghost' }, 'name occupation', function (err, person) {
Schedule.findOne({'person_id': person.id }, 'events', function(err, schedule) {
...
}
})
我正在寻找这个问题的解决方案.我有一个想法是做这样的事情:
function() {
var p;
var s;
var done = false;
Person.findOne(..., ..., function(err, person) {
p = person;
done = true;
});
while(!done){}
done = false;
Schedule.findOne(..., ..., function(err, schedule) {
s = schedule;
done = true;
});
while(!done){}
done = false;
// ...
}
如果我这样做我的查询,性能影响是什么?我也对解决这个问题的其他想法持开放态度.
最佳答案 为了回答你最直接的问题,旋转等待回调的性能影响是旋转等待可能会在同一个进程或同一台机器上完成其他更有用的任务.如果您的应用程序在没有电源管理的单用户计算机上运行,这没关系,但这些都不可能.忙碌等待将破坏移动平台上的电池寿命,增加数据中心的电力成本,并使未来的代码维护者诅咒你的名字!
正如elclanrs已在评论中建议的那样,您可以查看“async”库以帮助简化您的代码,但无论如何您应该避免忙于等待.